Tak A
może być dziedziczony przez klasę zagnieżdżoną, podczas gdy B
nie może być w ogóle dziedziczony. Jest to całkowicie legalne:
public class A {
private A() { }
public class Derived : A { }
}
Należy pamiętać, że każdy kod może utworzyć new A.Derived()
lub dziedziczyć A.Derived
(jego konstruktor jest publiczny), ale nie ma innych zajęć poza tekstem źródłowym A
może dziedziczyć bezpośrednio z A
.
Typowym zastosowaniem czegoś takiego to klasa z wartościami enum-like, ale które mogą mieć niestandardowe zachowanie:
public abstract class A {
private A() { }
public abstract void DoSomething();
private class OneImpl : A {
public override void DoSomething() { Console.WriteLine("One"); }
}
private class TwoImpl : A {
public override void DoSomething() { Console.WriteLine("Two"); }
}
public static readonly A One = new OneImpl();
public static readonly A Two = new TwoImpl();
}
Dlaczego chciałbyś mieć zajęcia z prywatnym konstruktorem? –
@MarkusMeskanen Klasa może mieć publiczną metodę statycznej fabryki, która musi być jedynym sposobem, w jaki klient może utworzyć wystąpienie klasy. –
@MarkusMeskanen [Singletons] (http://msdn.microsoft.com/en-us/library/ff650316.aspx) –