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

本文关键字:方法 一下 语法 能解释 | 更新日期: 2023-09-27 18:00:31

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

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

感谢您对理解此语法的帮助。

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

这些是类型参数。这些用于在不牺牲可重用性的情况下加强类型安全性。对于SO问题来说,这是一个有点太大的话题,但我建议阅读这篇文章;http://msdn.microsoft.com/en-us/library/512aeb7t.aspx或者Jon Skeets的C#深度,它很好地解释了它们。

作为一个例子,我们只讨论Dictionary<TKey, TValue>,其中TKey是键的类型,TValue是值的类型。在实例化集合时声明这些参数。还有一些方法可以对允许的类型进行一些限制,但我将留给您阅读。基本上,如果我申报;

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

然后试试类似的东西;

  dic.Add(1, InstanceOfMyObjectType);

我将得到一个编译器错误,因为我的集合只会为键取一个字符串,为值取一个MyObjectType实例。

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

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

泛型方法的另一个例子是LINQ扩展方法。例如,IEnumerable.Where看起来像这样:

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

它返回一个"TSource"类型的IEnumerable,接受一个"TSSource"的IEnumarable和一个接受"TSource"并返回布尔值的函数。