簡體   English   中英

僅具有私有構造函數的抽象類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM