[英]Some questions about abstract class with private, public and protected constructors
[英]Abstract class with only private constructors
為什么要允許此代碼進行編譯?
public abstract class AbstractPrivateBase
{
private AbstractPrivateBase() { }
}
繼承者無法實例化自己。 因此,沒有辦法從此類中派生。 我覺得Visual Studio(甚至是Resharper)應該顯示一個錯誤,指出“抽象類不能只包含私有構造函數”。 因為在語言上不允許這樣做是沒有意義的。
唯一可能的使用是如果此類包含靜態成員。 如果是這種情況,友好的警告說明:“可以將只有私有構造函數的抽象類設為靜態。” 因為除了靜態成員之外,沒有其他方法可以訪問任何其他成員。
如果從該私有基派生一個嵌套類,這將是非常合理的:
public abstract class AbstractPrivateBase {
public static AbstractPrivateBase D1 = new Derived1();
public static AbstractPrivateBase D2 = new Derived2();
public static AbstractPrivateBase D3 = new Derived3();
private AbstractPrivateBase() { }
private class Derived1 : AbstractPrivateBase {
}
private class Derived2 : AbstractPrivateBase {
}
private class Derived3 : AbstractPrivateBase {
}
}
類Derived1
通過Derived3
訪問private AbstractPrivateBase()
構造函數,所以這招有效地限制推導嵌套類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.