me gustaría tener la siguiente configuración:.NET: ¿cómo hacer una clase de tal manera que solo otra clase específica pueda instanciarla?
class Descriptor
{
public string Name { get; private set; }
public IList<Parameter> Parameters { get; private set; } // Set to ReadOnlyCollection
private Descrtiptor() { }
public Descriptor GetByName(string Name) { // Magic here, caching, loading, parsing, etc. }
}
class Parameter
{
public string Name { get; private set; }
public string Valuie { get; private set; }
}
Toda la estructura será de sólo lectura una vez cargada desde un archivo XML. Me gustaría que sea así, que solo la clase Descriptor pueda instanciar un parámetro.
Una forma de hacer esto sería hacer una interfaz IParameter
y luego hacer Parameter
clase privada en la clase de descriptor, pero en el uso del mundo real del parámetro tendrá varias propiedades, y me gustaría evitar la redefinición de ellos dos veces .
¿Es esto de alguna manera posible?
Esto todavía le permite crear otra subclase de parámetro y crear una instancia a través de eso. Haga el constructor 'protected internal', quizás. –
@Martinho: eres incorrecto. Es un concepto erróneo común que "interno protegido" impide que las clases externas al ensamblaje entren en subclases. Debería considerarlo como protegido O interno, no protegido Y interno, es decir, la clase puede derivarse de cualquier otra clase dentro o fuera del ensamblado, pero solo puede crearse una instancia internamente. – Joe