在类声明中使用new关键字

时间:2012-09-18 15:36:05

标签: c# declaration

有人可以在下面的代码中解释使用new关键字吗?

public class TableList<T> : ObservableCollection<T> where T : ITable, new()

2 个答案:

答案 0 :(得分:3)

假设这是C#:

它是generic constraint,这意味着T必须具有无参数构造函数

没有它你就无法构造一个新的T()

答案 1 :(得分:3)

这是一个泛型的事情。这意味着用于替换T的任何类都必须具有不带参数的构造函数。

即。用你的例子,如果你写

var list = new TableList<Foo>();

Foo必须有一个默认的构造函数,否则它不会编译。

这样做的原因是它允许TableList类的作者说

var item = new T();

并且编译器可以将其(特别是TableList&lt; Foo&gt;)转换为

var item = new Foo();

不用担心Foo可能无法通过默认构造函数实例化。