C# 委托职能
我遇到了一行我似乎无法理解的代码 让我解释一下 我所理解的是,通过下面的一行,我定义了一种名为“myDelegate”的委托类型。此类型可以保存指向签名为int(int,int)的函数的指针 我没有得到的是下面这行:C# 委托职能,c#,delegates,func,C#,Delegates,Func,我遇到了一行我似乎无法理解的代码 让我解释一下 我所理解的是,通过下面的一行,我定义了一种名为“myDelegate”的委托类型。此类型可以保存指向签名为int(int,int)的函数的指针 我没有得到的是下面这行: public delegate T Func<T>(T a, T b); 公共委托T函数(ta,tb); 我的意思是,为什么我要定义一个名为Func的类型,而这个类型已经在.NET framework中定义了?好吧,当框架中有一个具有相同名称和数量的泛型类型参数的委
public delegate T Func<T>(T a, T b);
公共委托T函数(ta,tb);
我的意思是,为什么我要定义一个名为Func的类型,而这个类型已经在.NET framework中定义了?好吧,当框架中有一个具有相同名称和数量的泛型类型参数的委托可用时,声明自己的委托显然是个坏主意,但它不是无效的。我建议,如果这是您自己的代码,您可以适当地重命名它。请注意,它与
Func
不同,因为它对输入和输出都使用T
。您可能希望调用它BinaryOperator
或类似的名称(尽管二进制运算符不必具有相同的操作数类型,也不必具有相同的返回值类型)。,当框架中有一个具有相同名称和数量的泛型类型参数的委托时,声明自己的委托显然是个坏主意,但它不是无效的。我建议,如果这是您自己的代码,您可以适当地重命名它。请注意,它与Func
不同,因为它对输入和输出都使用T
。您可能希望将其称为BinaryOperator
或类似的名称(尽管二进制运算符不必具有相同的操作数类型,返回值也不必具有相同的类型)。Func语法是为了方便起见而存在的,通常最好对它们提供的IMHO进行标准化
Func和Action既方便又容易记住。相比之下,我发现委托语法有点笨拙。Func语法是为了方便起见而存在的,通常最好将它们提供的IMHO标准化 Func和Action既方便又容易记住。相比之下,我发现委托语法有点笨拙。与.NET
Func
不同:
T Func<T>();
T2 Func<T1, T2>(T1 arg);
T3 Func<T1, T2, T3>(T1 arg1, T2 arg2);
.. etc
T Func();
T2-Func(T1-arg);
T3功能(T1 arg1,T2 arg2);
.. 等
委托定义没有错误,是命名会与.NET版本混淆。与.NET函数不同:
T Func<T>();
T2 Func<T1, T2>(T1 arg);
T3 Func<T1, T2, T3>(T1 arg1, T2 arg2);
.. etc
T Func();
T2-Func(T1-arg);
T3功能(T1 arg1,T2 arg2);
.. 等
委托定义没有错,它的命名会与.NET版本混淆。此外,由于OP说他们“遇到了这段代码”,我想它可能是在.NET 3.5引入System.Func
之前编写的。@Sven:True。我总是忘记.NET2中存在哪些Action
和Func
重载。只是Action
?Action
出现在.NET2.0中Action
(非泛型)和Func
(及其泛型重载)不是。可能有人试图“扩展”框架中可用的泛型委托。我知道这不是一个好主意,但如果我用[var]替换Func,这也是一个保留字,它也可以工作,但如果我用[int]替换Func或者[尽管]它不起作用。你能解释一下吗?另外,因为OP说他们“遇到了这段代码”,我想这可能是在.Net 3.5引入System.Func
之前编写的。@Sven:True。我总是忘记.NET2中存在哪些Action
和Func
重载。只是Action
?Action
出现在.NET2.0中Action
(非泛型)和Func
(及其泛型重载)不是。可能有人试图“扩展”框架中可用的泛型委托。我知道这不是一个好主意,但如果我用[var]替换Func,这也是一个保留字,它也可以工作,但如果我用[int]替换Func或者[尽管]它不起作用。你能解释一下吗?Func
不是“语法”——它只是一系列框架提供的委托。当你说“发现委托语法有点笨拙”时,你是指声明新委托类型的语法吗?是的,这就是我的意思。只是我更喜欢看到他们这样表达。不,这不是C#语法,但您可以将提供的委托合并到您的样式中。不过,您的区别很有用。Func
不是“语法”——它只是一系列框架提供的委托。当你说“发现委托语法有点笨拙”时,你是指声明新委托类型的语法吗?是的,这就是我的意思。只是我更喜欢看到他们这样表达。不,这不是C#语法,但您可以将提供的委托合并到您的样式中。不过你的区别很有用。