web-dev-qa-db-ja.com

Method <ClassName>はどういう意味ですか?

私はこの構文を数回見ましたが、心配し始めています。

例えば:

iCalendar iCal = new iCalendar();
Event evt = iCal.Create<Event>();
45
inspite

これはジェネリックメソッドであり、Createは型パラメーターで宣言されています。詳細については、次のリンクを確認してください。

38
CMS

ジェネリックメソッドを呼び出しているので、あなたの場合、メソッドは次のように宣言できます。

public T Create<T>()

ジェネリック型のインスタンスを作成する場合と同じように、山かっこでtype引数を指定できます。

List<Event> list = new List<Event>();

それは役に立ちますか?

ジェネリックmethodsとジェネリックtypesの違いの1つは、コンパイラーがtype引数を推測できることです。たとえば、Createメソッドが代わりにあった場合:

public T Copy<T>(T original)

あなたはただ呼び出すことができます

Copy(someEvent);

そしてコンパイラはあなたが意味したことを推測します:

Copy<Event>(someEvent);
26
Jon Skeet

これは、C#で一般的なメソッドについて言及する方法です。

ジェネリックメソッドを定義するときは、次のようにコーディングします。

return-type MethodName<type-parameter-list>(parameter-list)

ジェネリックメソッドを呼び出すと、コンパイラは通常、次の例のように、指定された引数から型パラメータを推測します。

Array.ForEach(myArray, Console.WriteLine);

この例では、「myArray」が文字列配列の場合はArray.ForEach <string>を呼び出し、int配列の場合はArray.ForEach <int>を呼び出します。

コンパイラーがパラメーターから型を推測できない場合があります(パラメーターがまったくない例のように)。このような場合は、そのように手動で指定する必要があります。

1
Mehrdad Afshari

ファクトリメソッド パターンを実装するジェネリックメソッドです。

1
user33675

この構文は、ジェネリックスをメソッドに適用しているだけです。これは通常、メソッドの戻り値の型を制御するシナリオに使用されます。この種の構文は、IoCフレームワークを使用するコードに多く見られます。

0
lvaneenoo