Что означает метод <ClassName>? - PullRequest
43 голосов
/ 20 ноября 2008

Я видел этот синтаксис пару раз, и он начинает меня беспокоить,

Например:

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

Ответы [ 5 ]

36 голосов
/ 20 ноября 2008

Это универсальный метод, Create объявлен с параметрами типа, и проверьте эту ссылку для получения дополнительной информации:

24 голосов
/ 20 ноября 2008

Это вызов универсального метода - поэтому в вашем случае метод может быть объявлен так:

public T Create<T>()

Вы можете указать аргумент типа в угловых скобках так же, как при создании экземпляра универсального типа:

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

Это помогает?

Одно отличие между универсальными методами и универсальными types в том, что компилятор может попытаться вывести аргумент типа. Например, если ваш Create метод был вместо:

public T Copy<T>(T original)

Вы могли бы просто позвонить

Copy(someEvent);

и компилятор выведет, что вы имели в виду:

Copy<Event>(someEvent);
1 голос
/ 20 ноября 2008

Это общий метод, реализующий шаблон Factory Method .

0 голосов
/ 20 ноября 2008

Этот синтаксис просто применяет обобщенные значения к методу. Обычно он используется для сценариев, в которых вы хотите контролировать тип возвращаемого значения метода. Вы найдете такой синтаксис в коде, который использует платформу IoC.

0 голосов
/ 20 ноября 2008

Вы упоминаете универсальный метод в C #.

Когда вы определяете универсальный метод, вы кодируете так:

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

Когда вы вызываете универсальный метод, компилятор обычно выводит параметр типа из указанных аргументов, как в этом примере:

Array.ForEach(myArray, Console.WriteLine);

В этом примере, если «myArray» является строковым массивом, он будет вызывать Array.ForEach , а если это массив int, то он будет вызывать Array.ForEach .

Иногда компилятор не может вывести тип из параметров (как в вашем примере, где вообще нет параметров). В этих случаях вы должны указать их вручную следующим образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...