在以下方法签名中,在方法名称CacheMe之后,<inType, outType>
是什么?我无法理解这个语法在CacheMe方法名称的右侧意味着什么或代表什么。我理解CacheMe方法名称左侧的<inType, outType>
是什么,但方法参数列表前面的<inType, outType>
是什么?
public static Func<inType, outType> CacheMe<inType, outType>(Func<inType, outType> passedInFunctionToExecute)`
感谢您理解这种语法的任何帮助。
答案 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;并返回一个布尔值。