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 を置き換えるために使用されるクラスには、引数のないコンストラクターが必要であることを意味します。

すなわち。あなたの例で、あなたが書くなら

var list = new TableList<Foo>();

Foo にはデフォルトのコンストラクターが必要です。そうしないと、コンパイルされません。

これを行う理由は、TableList クラスの作成者が次のように言うことができるようにするためです。

var item = new T();

コンパイラはそれを (特に TableList<Foo> の場合) を意味するように変換できます。

var item = new Foo();

Foo がデフォルトのコンストラクターを介してインスタンス化されない可能性があることを心配する必要はありません。

于 2012-09-18T15:45:13.397 に答える