C # делегат Func - PullRequest
       20

C # делегат Func

0 голосов
/ 27 июля 2011

Я наткнулся на строку кода, которую я не могу понять

Позвольте мне объяснить немного.

Что я понимаю, так это то, что следующей строкой я определяютип делегата с именем «myDelegate».Этот тип может содержать указатель на функцию с сигнатурой int (int, int)

public delegate int myDelegate(int a, int b);

Что я не получаю, это следующая строка:

public delegate T Func<T>(T a, T b);

Я имею в виду, почему яопределить тип с именем Func, который уже определен в .NET Framework?

Ответы [ 3 ]

4 голосов
/ 27 июля 2011

Ну, конечно, кажется плохой идеей объявить свой собственный делегат, когда в фреймворке доступен один делегат с тем же именем и количеством параметров универсального типа - но это не недействительно .Я полагаю, что если вы владеете этим кодом, переименуйте его соответствующим образом.Обратите внимание, что это не то же самое, что Func<T>, поскольку он использует T для обоих входов и выходов.Возможно, вы захотите назвать его BinaryOperator или что-то подобное (хотя двоичные операторы не обязательно должны иметь одинаковые типы операндов, а возвращаемое значение не должно быть того же типа).

0 голосов
/ 27 июля 2011

.NET Func<T> отличается:

T Func<T>();
T2 Func<T1, T2>(T1 arg);
T3 Func<T1, T2, T3>(T1 arg1, T2 arg2);
.. etc

Определение делегата не является неправильным, это название, которое будет путать с версией .NET.

0 голосов
/ 27 июля 2011

Синтаксис Func существует для удобства, и часто лучше стандартизировать то, что они предоставляют IMHO.

Func и Action удобны и легко запоминаются. С другой стороны, я нахожу синтаксис делегата немного неуклюжим.

...