О создании объекта делегата - C # - PullRequest
2 голосов
/ 13 января 2012

Я определяю тип делегата, например:

delegate void DrawShape(Brush aBrush,Rectangle aRect);

Скажите, почему все приведенные ниже методы создания объекта делегата являются правильными:

DrawShape DrawRectangleMethod = CreateGraphics().FillRectangle;
DrawShape AnotherDrawRectangleMethod = new DrawShape(CreateGraphics().FillRectangle);

Почему метод без "New" может работать правильно?

Ответы [ 3 ]

3 голосов
/ 13 января 2012
DrawShape DrawRectangleMethod = CreateGraphics().FillRectangle;

возможно благодаря неявным преобразованиям групп методов в C # 2, которые определены здесь .

1 голос
/ 13 января 2012

C # достаточно умен, чтобы обрабатывать группы методов для вас.Группа методов - это имя метода без круглых скобок;может быть много перегрузок метода с разными сигнатурами, но «базовое» имя без скобок называется группой методов.Компилятор вставит для вас вызов конструктора, что позволит вам написать более краткую строку кода.

0 голосов
/ 13 января 2012

Потому что компилятор автоматически вставит его для вас.Это просто синтаксический сахар.

Просто взгляните на Jons Руководство Блефера в главе Delegates.

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