Я пытаюсь понять ограничения на параметры универсального типа в C #. Какова цель ограничения where T : new()
? Зачем вам настаивать на том, чтобы аргумент типа имел открытый конструктор без параметров?
Edit:
Я должен что-то упустить. Ответ с наивысшим рейтингом говорит, что открытый конструктор без параметров необходим для создания экземпляра универсального типа. Если это так, почему этот код компилируется и запускается?
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
}
}
Редактировать: В своем комментарии Гейб напомнил мне, что если я не определяю конструктор, компилятор по умолчанию предоставляет без параметров. Итак, класс Foo в моем примере действительно имеет открытый конструктор без параметров.