2012-01-04 5 views
2

Можно создать дубликат:
very simple delegate musingдва способа определения делегатом

Я задавался вопросом, что разница между этим методом определения делегата

System.Action act; 
act = MethodWithoutParameters; 

и этот

System.Action act; 
act = new System.Action(MethodWithoutParameters); 

. Должен ли я отдать предпочтение одному другому? Если да, то почему? Я, к сожалению, не смог найти много информации о моем вопросе. Я бы очень признателен, если бы кто-нибудь мог рассказать мне о различиях между этими двумя частями кода.

ответ

6

Это синтаксический сахар: «неявное преобразование группы методов». Компилятор преобразует первую версию во вторую.

4

Эти две части кода производят то же самое ИЛ. Нет причин предпочитать друг друга. Это просто вопрос стиля.

1

Это exatcly же, нет никакой разницы

Я хотел бы добавить также третий один, лямбда:

System.Action act = x=>DoSomething(x); 
+3

Это один немного отличается. Он вводит лямбда-выражение, в результате чего делегат указывает на метод, который в свою очередь вызывает метод DoSomething. Есть несколько (по общему признанию, неясных) случаев, когда это функционально отличается. –

+0

@ChrisShain: Если это может быть другим, то объявление той же самой «лямбды» внутри обычной функции, объявленной как «делегат», должно привести к тому же неясным результатам. Не так ли? – Tigran

+0

Я не уверен, что понимаю, что вы просите –

Смежные вопросы