我遇到了一行我似乎无法理解的代码
让我稍微解释一下。
我所理解的是,通过以下行,我定义了一种名为“myDelegate”的委托。这种类型可以保存一个指向具有签名 int (int, int) 的函数的指针
public delegate int myDelegate(int a, int b);
我没有得到的是以下行:
public delegate T Func<T>(T a, T b);
我的意思是为什么我要定义一个名为 Func 的类型,它已经在 .NET 框架中定义了?
好吧,当框架中提供具有相同名称和数量的泛型类型参数的委托时,声明自己的委托似乎是一个坏主意——但它不是无效的。我建议如果这是您拥有的代码,请适当地重命名它。请注意,它与Func<T>用于T输入和输出的不同。您可能想要调用它BinaryOperator或类似的名称(尽管二元运算符不必具有相同的操作数类型,返回值也不必具有相同的类型)。
Func 语法是为了方便而存在的,而且通常最好对它们提供的内容进行标准化,恕我直言。
Func 和 Action 既方便又好记。相比之下,我发现委托语法有点笨拙。
.NETFunc<T>不同:
T Func<T>();
T2 Func<T1, T2>(T1 arg);
T3 Func<T1, T2, T3>(T1 arg1, T2 arg2);
.. etc
委托定义没有错,它的命名会与 .NET 版本混淆。