免責聲明:理論問題
新的約束規定,在泛型類 聲明任何 類型參數必須有一個公共 參數構造函數。爲什麼new()約束需要公共構造函數?
來源:http://msdn.microsoft.com/en-us/library/sd2w2ew5(v=vs.80).aspx
如果我想我的泛型類有保護參數的構造函數呢?例如,如果我想寫一個Singleton
類,我將其「附加」到其他類以使它們成爲Singleton
,我不希望派生類可實例化 - 所有內容都應該通過.Instance
屬性。
internal class Singleton<T> where T : new()
{
public static T Instance { get; private set; }
static Singleton()
{
Singleton<T>.Instance = new T();
}
}
internal class OnlyOneOfMe : Singleton<OnlyOneOfMe>
{
protected OnlyOneOfMe()
{
}
}
這樣,Singleton<T>
能夠創建OnlyOneOfMe
類的唯一實例,但沒有什麼可以(除非它是一個子類)。
「如果通用父類可以訪問泛型類型的受保護成員呢?」
如果構造函數被保護,你打算如何調用它? – 2011-05-12 20:37:27
我知道它不被支持,但我的思考過程是:「如果派生類具有受保護的構造函數,那麼泛型類(父類)就可以看到它,因此它不需要公開,對不對?」 – 2011-05-12 20:44:18
不,錯了。受保護只能在一個方向上工作。只有後代才能訪問受保護的構造函數,基類完全不知道它們。 – 2011-05-12 20:45:29