簡體   English   中英

我是否需要為抽象類提供一個受保護的空構造函數?

[英]Do I need to provide an empty protected constructor for an abstract class?

我知道抽象類中的構造函數應在C#中得到保護。

但是某些抽象類不需要非參數構造函數。 例如:

public abstract MyAbstractClass {
    public abstract Method1();
    public abstract Method2();
    // non-parameterless constructors are not needed
}

我的問題是,在上述類中,是否需要提供一個空的受保護的構造函數來覆蓋默認的隱式構造函數? 那是:

public abstract MyAbstractClass {
    protected MyAbstractClass() { }

    public abstract Method1();
    public abstract Method2();
}

如果我不提供此受保護的空構造函數,則將有一個隱式默認構造函數,它是公共的(對嗎?)。 這違反了“抽象類中的構造函數不應公開”的規則。

但是,當我檢查ASP.NET MVC框架的源代碼時,我發現它們沒有為抽象類提供空的受保護的構造方法。 因此,也許設計規則應該是:

如果在抽象類中定義構造函數,則它們不應是公共的。

如果在抽象類中不需要非參數構造函數,則不要定義它們。

有什么想法嗎?

不,您不需要聲明受保護的默認構造函數。 如果您在抽象類的構造函數中沒有任何事情,請不要聲明任何內容。 如果您確實有事可做,則將其標記為受保護與將其標記為公共是相同的,因為基本構造方法只能由子代調用,並且該子代無論如何都將受到保護。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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