gpt4 book ai didi

c# - 为什么 new() 约束必须需要公共(public)构造函数?

转载 作者:行者123 更新时间:2023-11-30 19:47:53 24 4
gpt4 key购买 nike

免责声明:理论问题

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com