免责声明:理论问题
新的约束规定,在泛型类 声明任何 类型参数必须有一个公共 参数构造函数。为什么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