Method <classname>是什么意思?</classname>

时间:2008-11-20 15:29:58

标签: c# class oop generics syntax

我现在已经看过几次这种语法了,它开始让我担心,

例如:

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

5 个答案:

答案 0 :(得分:36)

这是一个通用方法,使用类型参数声明Create,并检查此链接以获取更多信息:

答案 1 :(得分:24)

它正在调用泛型方法 - 所以在你的情况下,方法可以这样声明:

public T Create<T>()

您可以在尖括号中指定type参数,就像创建泛型类型的实例一样:

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

这有帮助吗?

泛型方法和泛型类型之间的一个区别是编译器可以尝试推断类型参数。例如,如果您使用Create方法:

public T Copy<T>(T original)

你可以打电话

Copy(someEvent);

并且编译器会推断出你的意思:

Copy<Event>(someEvent);

答案 2 :(得分:1)

这是一种实现Factory Method模式的通用方法。

答案 3 :(得分:0)

这就是你在C#中提到泛型方法的方式。

定义泛型方法时,您可以这样编码:

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

当您调用泛型方法时,编译器通常会从指定的参数中推断出type参数,如下例所示:

Array.ForEach(myArray, Console.WriteLine);

在这个例子中,如果“myArray”是一个字符串数组,它将调用Array.ForEach&lt; string&gt;如果它是一个int数组,它将调用Array.ForEach&lt; int&gt ;.

有时,编译器不可能从参数中推断出类型(就像你的例子一样,根本没有参数)。在这些情况下,您必须手动指定它们。

答案 4 :(得分:0)

这种语法只是将泛型应用于方法。它通常用于您想要控制方法的返回类型的场景。您将在使用IoC框架的代码中找到这种语法。