我知道抽象類中的構造函數應該在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框架的源代碼,我看到他們沒有爲抽象類提供空的受保護的構造。所以,也許是設計規則應該是:
如果定義在抽象類的構造函數,他們不應該是公開的。
如果在抽象類中不需要非無參數構造函數,只是不要定義它們。
有什麼想法?
C#中沒有隱式的構造函數,我相信。所有參與變量初始化爲空值C++ – 2012-08-07 03:16:43
如果您沒有定義任何構造函數,那麼將會有一個默認構造函數。 – 2012-08-07 03:37:01