为什么 C# 中的泛型参数没有带参数的构造函数约束?
Why there is no constructor-with-parameters constrain on generic parameters in C#?
众所周知,我们不能在当前版本的 C# 中编写这样的代码:
public class A {
public static void Method<T> () where T : new(string, string) {
var x = new T("foo", "bar");
}
}
但我们可以使用 new()
约束来强制 T
具有 public 无参数构造函数,然后我们可以使用 T
创建新实例new T()
表达式。
SO 上有很多关于各种解决方法的答案,但没有一个能解释为什么语言设计者没有实现这样的功能。从关于 SO 的大量问题来看,它似乎在阅读世界应用程序中很有用。
为什么此功能未在 C# 中实现,是否有可能在下一版本的语言中添加?
根据这个feature request link on github,原因是 CLR 没有提供 C# 实现它所需的信息。
有人猜测可能会修改 CLR,以便未来的 C# 版本(7.0?)支持此功能。
众所周知,我们不能在当前版本的 C# 中编写这样的代码:
public class A {
public static void Method<T> () where T : new(string, string) {
var x = new T("foo", "bar");
}
}
但我们可以使用 new()
约束来强制 T
具有 public 无参数构造函数,然后我们可以使用 T
创建新实例new T()
表达式。
SO 上有很多关于各种解决方法的答案,但没有一个能解释为什么语言设计者没有实现这样的功能。从关于 SO 的大量问题来看,它似乎在阅读世界应用程序中很有用。
为什么此功能未在 C# 中实现,是否有可能在下一版本的语言中添加?
根据这个feature request link on github,原因是 CLR 没有提供 C# 实现它所需的信息。
有人猜测可能会修改 CLR,以便未来的 C# 版本(7.0?)支持此功能。