Ich habe eine Sammlung von Klassen, die von einer abstrakten Klasse erben, die ich erstellt habe. Ich möchte die abstrakte Klasse als eine Factory zum Erstellen von Instanzen von konkreten Implementierungen meiner abstrakten Klasse verwenden.Gibt es eine Möglichkeit, einen Konstruktor nur für eine Elternklasse in C# sichtbar zu machen?
Gibt es eine Möglichkeit, einen Konstruktor von allem Code außer einer Elternklasse zu verbergen.
Ich möchte diese im Grunde
public abstract class AbstractClass
{
public static AbstractClass MakeAbstractClass(string args)
{
if (args == "a")
return new ConcreteClassA();
if (args == "b")
return new ConcreteClassB();
}
}
public class ConcreteClassA : AbstractClass
{
}
public class ConcreteClassB : AbstractClass
{
}
tun, aber ich will niemanden verhindern, dass direkt die zwei konkrete Klassen instanziieren. Ich möchte sicherstellen, dass nur die MakeAbstractClass() -Methode die Basisklassen instanziieren kann. Gibt es eine Möglichkeit, dies zu tun?
UPDATE
Ich brauche nicht von außerhalb der abstrakten Klasse keine spezifischen Methoden der ConcreteClassA oder B zuzugreifen. Ich brauche nur die öffentlichen Methoden, die meine Abstract-Klasse bietet. Ich muss nicht wirklich verhindern, dass die Concrete-Klassen instanziiert werden, ich versuche nur, sie zu vermeiden, da sie keine neuen öffentlichen Schnittstellen bereitstellen, sondern nur verschiedene Implementierungen einiger ganz spezieller Dinge, die innerhalb der abstrakten Klasse liegen.
Für mich ist die einfachste Lösung make child classes as samjudson mentioned. Ich möchte das jedoch vermeiden, da es die Datei meiner abstrakten Klasse viel größer machen würde, als ich es gerne hätte. Ich möchte lieber, dass Klassen für die Organisation über einige Dateien verteilt werden.
Ich denke, es gibt keine einfache Lösung für dieses ...
Schönes Beispiel, aber machen Sie die Benennung ein bisschen mehr NETy und nennen Sie es "CreateAbstractClass (string args)" für Coding-Standards Willen :) –