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