私はこの構文を数回見ましたが、心配し始めています。
例えば:
iCalendar iCal = new iCalendar();
Event evt = iCal.Create<Event>();
これはジェネリックメソッドであり、Createは型パラメーターで宣言されています。詳細については、次のリンクを確認してください。
ジェネリックメソッドを呼び出しているので、あなたの場合、メソッドは次のように宣言できます。
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);
これは、C#で一般的なメソッドについて言及する方法です。
ジェネリックメソッドを定義するときは、次のようにコーディングします。
return-type MethodName<type-parameter-list>(parameter-list)
ジェネリックメソッドを呼び出すと、コンパイラは通常、次の例のように、指定された引数から型パラメータを推測します。
Array.ForEach(myArray, Console.WriteLine);
この例では、「myArray」が文字列配列の場合はArray.ForEach <string>を呼び出し、int配列の場合はArray.ForEach <int>を呼び出します。
コンパイラーがパラメーターから型を推測できない場合があります(パラメーターがまったくない例のように)。このような場合は、そのように手動で指定する必要があります。
ファクトリメソッド パターンを実装するジェネリックメソッドです。
この構文は、ジェネリックスをメソッドに適用しているだけです。これは通常、メソッドの戻り値の型を制御するシナリオに使用されます。この種の構文は、IoCフレームワークを使用するコードに多く見られます。