我有一些代码(不是我写的)我不理解:
private Func<ControllerContext, string> ThemeSelector { get; set; }
所以这不是类型,这是Func<T、 string>我不知道这种东西是如何命名的,但我在谷歌上找不到一些解释。有人能给我一些解释吗?
谢谢。
Func<ControllerContext, string>
是泛型Func<T,K>
的特定类型。你需要先了解泛型,然后才能完全理解它。
因此,ThemeSelector只是该类型的一个属性,它具有setter和getter。
Func类型是一个委托类型,它表示一个函数,该函数接受一个T类型的参数并返回一个K类型的实例。
这意味着您可以将任何此类函数分配给属性。例如:
private string MyFunction(ControllerContext context) {
return "Hello world!";
}
...
ThemeSelector = MyFunction;
Console.WriteLine(ThemeSelector(null));
将在控制台中打印"Hello world!"。
这是一种委托类型,即这是一个属性,可以设置。它可以称为方法。
例如
/* Action<String> is a delegate, get it as an object*/
public void Foo (String[] arr, Action<String> instruction) {
foreach (var element in arr) {
//use it as a method
instruction(element);
}
}
编辑
这同样适用于Func
// Func<Int32, Boolean> means that this is a function which accepts one argument as an integer and returns boolean.
public void Foo(Int32 data, Int32 otherData, Func<Int32, Boolean> instruction) {
var result1 = instruction(data);
var result2 = instruction(data2);
Console.WriteLine(result1==result2);
}
编辑
更全面的例子。
//This methods accepts the third parameter as a function with 2 input arguments of type
// Int32 and return type String
public static void DoSomething(Int32 data1, Int32 data2, Func<Int32, Int32, String> whatToDo) {
var result = whatToDo(data1, data2);
Console.WriteLine(result);
}
public static Main(String[] args) {
// here we are calling the DoSomething and
// passing the Concat method as if it was an object.
DoSomething(1, 2, Concat);
// The same with multiply concat.
DoSomething(7, 2, MultiplyConcat);
}
public static String Concat(Int32 arg1, Int32 arg2) {
return arg1.ToString() + " " + arg2.ToString():
}
public static String MultiplyConcat(Int32 arg1, Int32 arg2) {
return (arg1 * arg2).ToString();
}
这是一个类型!实际上它是委托类型。它表示一种可以在不显式声明委托的情况下使用的方法。
类型是泛型类型。示例中的一个类型为Func<T, TResult>
,它表示一个方法,该方法有一个T类型的参数,并返回一个TResult类型的值。具体到您的示例,它表示一个具有ControllerContext
参数并返回string
值的方法:
string ThemeSelectorHandler(ControllerContext context) {
returns context.ToString();
}
进一步阅读:
- Func代表
- .NET框架中的泛型
*委托是指向函数的指针
*Func是一种内置委托类型。尖括号中的最后一个类型是结果类型
*继承:对象->委托->函数
*Action是指向函数而不返回的内置委托。