我遇到了一些我似乎无法掌握的代码
让我解释一下。
我所理解的是,通过以下行,我定义了一个名为“myDelegate”的委托类型。此类型可以包含指向具有签名int(int,int)
的函数的指针public delegate int myDelegate(int a, int b);
我没有得到的是以下一行:
public delegate T Func<T>(T a, T b);
我的意思是为什么我要定义一个已经在.NET框架中定义的名为Func的类型?
答案 0 :(得分:4)
当框架中有一个具有相同名称和通用类型参数数量的委托时,声明自己的委托似乎是个坏主意 - 但它不是无效。我建议如果这是你拥有的代码,你可以适当地重命名它。请注意,它与Func<T>
不同,因为它对输入和输出都使用T
。您可能希望将其称为BinaryOperator
或类似的东西(尽管二元运算符不必具有相同的操作数类型,返回值也不必是相同的类型)。
答案 1 :(得分:0)
Func语法是为了方便起见,通常最好是标准化他们提供的东西。
Func和Action既方便又易于记忆。相比之下,我发现委托语法有点笨拙。
答案 2 :(得分:0)
.NET Func<T>
不同:
T Func<T>();
T2 Func<T1, T2>(T1 arg);
T3 Func<T1, T2, T3>(T1 arg1, T2 arg2);
.. etc
委托定义没有错,它的命名会让.NET版本混淆。