Он вызывает общий метод - поэтому в вашем случае метод может быть объявлен следующим образом:
public T Create<T>()
Вы можете указать аргумент типа в угловых скобках, как если бы вы создавали экземпляр универсального типа:
List<Event> list = new List<Event>();
Это поможет?
Одно различие между универсальным методы и универсальным типы заключается в том, что компилятор может попытаться вывести аргумент типа. Например, если вместо этого ваш метод Create
:
public T Copy<T>(T original)
ты мог бы просто вызвать
Copy(someEvent);
и компилятор сделает вывод, что вы имели в виду:
Copy<Event>(someEvent);
@mmmshuddup: Нет, я бы так не сказал.
Это универсальный метод, Create объявлен с параметрами типа, и проверьте эти ссылки для получения дополнительной информации:
-1 за то, что по сути сводится к ответу только по ссылке. Хотя эти ссылки удобны для дальнейшего использования, было бы здорово, если бы их содержание было кратко изложено в вашем сообщении более подробно, чем одно предложение.
Так вы упоминаете универсальный метод в C#.
Когда вы определяете универсальный метод, вы кодируете следующим образом:
return-type MethodName<type-parameter-list>(parameter-list)
Когда вы вызываете универсальный метод, компилятор обычно определяет параметр типа из указанных аргументов, как в этом примере:
Array.ForEach(myArray, Console.WriteLine);
В этом примере, если myArray является строковым массивом, он вызовет Array.ForEach <string>, а если это массив int, он вызовет Array.ForEach <int>.
Иногда компилятор не может определить тип по параметрам (как в вашем примере, где параметры отсутствуют вообще). В этих случаях вам придется указать их вручную вот так.
Этот синтаксис просто применяет универсальные шаблоны к методу. Обычно он используется для сценариев, в которых вы хотите контролировать тип возвращаемого значения метода. Вы часто найдете такой синтаксис в коде, использующем фреймворк IoC.
Это общий метод, реализующий шаблон Заводской метод.
Будет ли это считаться формой внедрения зависимостей?