我试图了解 C# 中泛型类型参数的约束。where T : new()
约束的目的是什么?为什么你需要坚持类型参数有一个公共的无参数构造函数?
编辑: 我一定错过了什么。评分最高的答案说公共无参数构造函数是实例化泛型类型所必需的。如果是这样,为什么这段代码会编译和运行?
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//class Foo has no public parameterless constructor
var test = new genericClass<Foo>();
}
}
class genericClass<T> where T : new()
{
T test = new T(); //yet no problem instantiating
}
class Foo
{
//no public parameterless constructor here
}
}
编辑:在他的评论中,gabe 提醒我,如果我没有定义构造函数,编译器会默认提供一个无参数的构造函数。因此,我的示例中的类 Foo 实际上确实有一个公共的无参数构造函数。