1

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

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

2 回答 2

3

假设这是 C#:

它是一个泛型约束,这意味着 T 必须有一个无参数的构造函数

没有它你不能构造一个新的 T()

于 2012-09-18T15:44:01.267 回答
3

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

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

var list = new TableList<Foo>();

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

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

var item = new T();

并且编译器可以将其(特别是对于 TableList<Foo>)翻译为

var item = new Foo();

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

于 2012-09-18T15:45:13.397 回答