Делегат работает без создания экземпляра - PullRequest
2 голосов
/ 14 октября 2010

Мои две версии следующих объявлений работают нормально.

1) Func<int,int,int> findMax=Max;
   Console.WriteLine("Max={0}",findMax(10,20));

2)Func<int,int,int> findMax=new Func<int,int,int>(Max);
   Console.WriteLine("Max={0}",findMax(10,20));

, где

public static T Max<T>(T a, T b) where T:IComparable
{
            if (a.CompareTo(b) > 0) return a;
            else return b;
}

В листинге 2 я создал экземпляры делегатов, а в листинге 1 - нет. Как работает код для листинга 1 без создания экземпляра делегата Func?

Ответы [ 2 ]

4 голосов
/ 14 октября 2010

Нет, в обоих случаях вы создали экземпляр делегата. Просто в первой версии это скрыто преобразованием группы методов . Первая форма является эффективно синтаксическим сахаром для второй.

В основном Max - это группа методов, и группу методов можно преобразовать в любой совместимый тип делегата.

2 голосов
/ 14 октября 2010

Это новая функция в C # 2;компилятор неявно создаст экземпляр делегата.

Это чистый синтаксический сахар;скомпилированный IL идентичен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...