Ein mögliches Design, das einen privaten Konstruktor auf eine abstrakte Klasse verwenden würde:
public abstract class BaseClass
{
private BaseClass(Object param)
{
//Do something with parameters
}
//Provide various methods that descendant classes will know how to perform
public static BaseClass FromObject(Object value)
{
//Based on object, choose which type of derived class to construct...
}
private class HiddenDerivedA : BaseClass
{
public HiddenDerivedA(Object value)
: base(value)
{
}
}
private class HiddenDerivedB : BaseClass
{
public HiddenDerivedB(Object value)
: base(value)
{
}
}
}
Dieses Muster ist nützlich, wenn die abgeleiteten Implementierungen fest an die Auswahllogik gekoppelt sind, verwendet, um sie zu konstruieren und Sie möchten einen hohen Grad an Isolation von dem Rest Ihres Codes bieten. Es entbindet Sie von der Verantwortung, andere als die von Ihnen ausdrücklich beabsichtigten Erben zu unterstützen, und ermöglicht Ihnen, alle privaten Zustände aus der Basisklasse für Ihre abgeleiteten Klassen verfügbar zu machen.
In 2: Sie meinen das Schlüsselwort "this". "base" gehört zu abgeleiteten Klassen und kann keine privaten Schlüssel aufrufen. –
@John: Ja, thx. Wird bearbeiten. –
@John, "base" kann private Konstruktoren aufrufen, wenn der Ableitungstyp eine geschachtelte Klasse des abgeleiteten Typs ist. –