web-dev-qa-db-ja.com

C#では、「where T:class」とはどういう意味ですか?

C#ではwhere T : classはどういう意味ですか?

すなわち。

public IList<T> DoThis<T>() where T : class
118
Makach

簡単に言えば、これはジェネリックパラメーターをクラス(または、より具体的には、クラス、インターフェイス、デリゲート、または配列型になり得る参照型)に制約することです。

詳細は MSDNの記事 をご覧ください。

100
Andy Rose

汎用型制約 です。この場合、ジェネリック型Tは参照型(クラス、インターフェイス、デリゲート、または配列型)でなければならないことを意味します。

37
Oded

これはTの型制約であり、クラスでなければならないことを指定します。

where句を使用して、他の型制約を指定できます。例:

where T : struct // T must be a struct
where T : new()  // T must have a default parameterless constructor
where T : IComparable // T must implement the IComparable interface

詳細については、MSDNのページで where 、または 一般的なパラメーター制約 をご覧ください。

33
Donut

これは、T参照型に制限します。値型(structsおよびstringを除くプリミティブ型)をそこに配置することはできません。

13
Vilx-

つまり、ジェネリックメソッドを使用するときにTとして使用される型はクラスでなければなりません。つまり、intdoubleのような構造体または組み込みの数値にすることはできません。

// Valid:
var myStringList = DoThis<string>();
// Invalid - compile error
var myIntList = DoThis<int>();
9
Isak Savo

where T: classは、文字通りT has to be a classを意味します。任意の参照タイプを使用できます。これで、コードがDoThis<T>()メソッドを呼び出すたびに、Tを置き換えるクラスを提供する必要があります。たとえば、DoThis<T>()メソッドを呼び出す場合、次のように呼び出す必要があります。

DoThis<MyClass>();

あなたの方法が次のような場合:

public IList<T> DoThis<T>() where T : class
{
   T variablename = new T();

   // other uses of T as a type

}

その後、メソッド内でTが出現する場所は、MyClassに置き換えられます。そのため、コンパイラが呼び出す最終メソッドは次のようになります。

public IList<MyClass> DoThis<MyClass>() 
{
   MyClass variablename= new MyClass();

  //other uses of MyClass as a type

  // all occurences of T will similarly be replace by MyClass
 }
7
explorer

これは、型パラメーター制約と呼ばれます。事実上、タイプTの種類を制限します。

Type引数は参照型である必要があります。これは、クラス、インターフェイス、デリゲート、または配列タイプにも適用されます。

型パラメーターの制約(C#プログラミングガイド)

4
Carlos

Tはオブジェクトの種類を表し、任意の種類を指定できることを意味します。 IList:IList s = new IListの場合; s.add( "Always accept string。")になりました。

4
AsifQadri

ここで、Tはクラスを指します。参照型でもかまいません。

2
Hemant Kumar

「T」は汎用タイプを表します。これは、あらゆるタイプのクラスを受け入れることができることを意味します。次の記事が役立ちます。

http://www.15seconds.com/issue/031024.htm
1
Randy Minder