在C#泛型中,我们可以说,使类型参数T
具有默认构造函数的约束where T : new()
。但是,没有其他像这样的约束有效(new(string)
例如,等等)。
从语言设计和/或实现的角度来看,这是什么原因?
构造函数的工作方式或类型系统的实现方式是否有某些禁止(或至少使之更加困难)的东西?如果是这样,那是什么?我记得读书的地方,default(T)
实际上编译到new T()
了T : struct
。可能与此有关吗?
还是仅仅是为了避免使语言过于复杂而做出的设计决定?
@RobertHarvey是的,这正是我的意思。我本质上是在问是否有某种因素使默认构造函数在特殊实现方式上有意义,或者只是一个任意选择就包括了这个,而没有另一个。
—
Theodoros Chatzigiannakis 2014年
默认构造函数以某些特定且重要的方式很有用。例如,它们使类型易于序列化。
—
罗伯特·哈维
特定的ctor签名可能很有用。例如,如果类型变量被限制为Collection <T>且其ctor为T(Collection <T>),则您知道可以给另一个构造新的collection。但是,这种有用性是否值得额外的复杂性是一个问题。
—
Phoshi 2014年
new(string)
不是默认的构造函数约束。您的问题等于说“为什么不存在需要特定构造函数签名的约束?” 很可能因为这样的约束不是特别有用。