Ich hätte gerne folgendes Setup:.NET - Wie man eine Klasse so macht, dass nur eine andere spezifische Klasse sie instanziieren kann?
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; }
}
Die gesamte Struktur wird nach dem Laden aus einer XML-Datei schreibgeschützt. Ich möchte es so machen, dass nur die Descriptor-Klasse einen Parameter instanziieren kann.
Eine Möglichkeit wäre, eine IParameter
-Schnittstelle zu erstellen und dann die Parameter
-Klasse in der Descriptor-Klasse privat zu machen, aber in der Praxis wird der Parameter mehrere Eigenschaften haben, und ich möchte vermeiden, sie zweimal neu zu definieren .
Ist das irgendwie möglich?
Dadurch können Sie immer noch eine andere Unterklasse von Parameter erstellen und instanziieren. Machen Sie vielleicht den Konstruktor "Geschützt intern". –
@Martinho: Sie sind falsch. Es ist ein häufiges Missverständnis, dass "protected internal" verhindert, dass Klassen außerhalb der Assembly von Unterklassen gebildet werden. Sie sollten es als geschützt ODER intern, nicht geschützt AND intern betrachten - d. H. Die Klasse kann von jeder anderen Klasse innerhalb oder außerhalb der Assembly abgeleitet werden, kann aber nur intern instanziiert werden. – Joe