免责声明:理论问题
The new constraint specifies that any type argument in a generic class declaration must have a public parameterless constructor.
Source: http://msdn.microsoft.com/en-us/library/sd2w2ew5(v=vs.80).aspx
如果我希望我的泛型类有一个protected 无参数构造函数怎么办?例如,如果我想写一个 Singleton
我“附加”到其他类(class)以制作它们的类(class)Singleton
s,我不希望派生类是可实例化的 - 一切都应该通过 .Instance
属性(property)。
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
的唯一实例类,但没有别的可以(除非它是一个子类)。
“如果泛型父类可以访问泛型类型的 protected 成员会怎样?”
最佳答案
因为那是约束的定义。这有点像问为什么 T : class
要求 T
是引用类型。根据定义,这是真的。
此外,如果它不是公共(public)构造函数,那么约束的意义何在?接收类型参数 T
的类如果不是 public 将无法调用构造函数。
关于c# - 为什么 new() 约束必须需要公共(public)构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5984152/