Mi piacerebbe avere la seguente configurazione:.NET: come creare una classe tale che solo un'altra classe specifica possa istanziarla?
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; }
}
L'intera struttura sarà di sola lettura una volta caricato da un file XML. Mi piacerebbe farlo, che solo la classe Descriptor può istanziare un parametro.
Un modo per farlo sarebbe quello di fare un'interfaccia IParameter
e poi fare Parameter
classe privata nella classe descrittore, ma nell'uso del mondo reale dei parametri avrà diverse proprietà, e mi piacerebbe evitare di ridefinire due volte .
È in qualche modo possibile?
Ciò consente comunque di creare un'altra sottoclasse di Parametro e di creare un'istanza attraverso quella. Rendere il costruttore "protetto all'interno", forse. –
@ Martin: non sei corretto. È un comune equivoco che "protetto all'interno" impedisce alle classi di uscire dall'assembly dalla sottoclasse. Si dovrebbe pensare ad esso come protetto O interno, non protetto E interno - cioè la classe può essere derivata da qualsiasi altra classe all'interno o all'esterno dell'assieme, ma può essere istanziata solo internamente. – Joe