C#委托方法签名 - 你能解释一下这个方法签名的语法吗?

时间:2014-04-28 20:23:50

标签: c# methods delegates

在以下方法签名中,在方法名称CacheMe之后,<inType, outType>是什么?我无法理解这个语法在CacheMe方法名称的右侧意味着什么或代表什么。我理解CacheMe方法名称左侧的<inType, outType>是什么,但方法参数列表前面的<inType, outType>是什么?

public static Func<inType, outType> CacheMe<inType, outType>(Func<inType, outType> passedInFunctionToExecute)`

感谢您理解这种语法的任何帮助。

2 个答案:

答案 0 :(得分:1)

这些是类型参数。这些用于强制类型安全而不牺牲可重用性。对于一个SO问题,这个问题有点太大,但我建议阅读这个; http://msdn.microsoft.com/en-us/library/512aeb7t.aspx或Jon Skeets C#In Depth,它可以很好地解释它们。

举个例子,我们可以谈谈Dictionary<TKey, TValue>,其中TKey是密钥的类型,TValue是值的类型。在实例化集合时声明这些参数。还有一些方法可以对允许的类型进行一些限制,但我会留给您阅读。基本上,如果我宣布;

 Dictionary<string, MyObjectType> dic = new Dictionary<string, MyObjectType>();

然后试着像;

  dic.Add(1, InstanceOfMyObjectType);

我会收到一个编译器错误,因为我的集合只会为该键获取一个字符串,并为该值设置一个MyObjectType实例。

答案 1 :(得分:0)

显然,CacheMe是一种采用两种类型参数的通用方法。在这种情况下,Func泛型委托使用相同的类型参数。

Func是一个返回值的泛型委托,类型定义列表中的最后一个类型是返回类型,其他类型是参数(因此&#34; inType&#34;和&#34 ; outType&#34;。)

泛型方法的另一个例子是LINQ扩展方法。例如,IEnumerable.Where如下所示:

IEnumerable.Where<TSource>(IEnumerable<TSource>, Func<TSource, Boolean>);

它返回一个IEnumerable类型&#34; TSource&#34;,采用IEnumerable类型&#34; TSource&#34;和一个接受&#34; TSource&#34;并返回一个布尔值。