He estado haciendo algo de programación últimamente y me enfrenté a un problema que encontré raro en C#. (Al menos para mí)Clase anidada con constructor oculto imposible en C#?
public class Foo
{
//whatever
public class FooSpecificCollection : IList<Bar>
{
//implementation details
}
public FooSpecificCollection GetFoosStuff()
{
//return the collection
}
}
Quiero que el consumo de Foo para poder obtener una referencia a FooSpecificCollection, incluso realizar algunas operaciones sobre el mismo. Tal vez incluso establecerlo en alguna otra propiedad de Foo o algo así, pero no poder CREAR una instancia de esta clase. (La única clase que debería poder instalar esta colección debería ser Foo.
¿Mi pedido es realmente exagerado? Sé que la gente definió de manera más inteligente C# pero no debería haber tal opción que una clase para padres puede crear una instancia de clase anidada pero nadie más no se puede.
hasta ahora he creado una solución para hacer una clase abstracta, o interfaz disponible a través de la propiedad y poner en práctica una clase privada de concreto que no está disponible en ningún otro lugar.
¿Es esta la manera correcta de manejar una situación así??
posible duplicado: http://stackoverflow.com/questions/1664793/how-to-restrict-access-to-nested-class-member-to-enclosing-class –
Curioso: ¿es el caso de que haya múltiples instancias de 'Foo, cada una con su propia' FooSpecificCollection '? – BillW
Sí, ese es el caso.Digamos que cada cliente tendrá una instancia de Foo (se creará de fábrica en algún momento preciso) y Foo creará una FooSpecificCollection por sí mismo. Doy acceso a una colección específica de foo para que la gente sepa qué foo tiene, y les dejo jugar con los elementos, pero no deberían poder crear uno porque no tiene mucho sentido. Durante la noche pensé que tal vez intenté hacer este código con demasiada semántica :) – luckyluke