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