Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Создание Delegate в одну строку


Автор: dAlex 3.3.2011, 15:35
Сейчас для создания делегата приходится делать так
Код

private delegate void AddDataByNewTradeDelegate(MyTrade mytrade);

//сама функция
void AddDataByNewTrade(MyTrade mytrade);


потом в коде вызывать делегат

Код

MainWindow.Instance.Dispatcher.BeginInvoke(new AddDataByNewTradeDelegate(AddDataByNewTrade), myTrade);


так как функций много, не хочется для каждой отдельно описывать делегат, да и нагромождения такие. Видела где-то, что можно объявить его в одну строку, "на лету". Как это сделать, и чем это может быть чревато? 

Автор: Gluttton 3.3.2011, 16:02
dAlex, есть предопределенные делегаты:
http://msdn.microsoft.com/ru-ru/library/bb549151(v=vs.90).aspx - для делегатов возвращающих значения.
http://msdn.microsoft.com/ru-ru/library/018hxwa8.aspx - для делегатов не возвращающих значения.
Если не ошибаюсь, то перегруженные версии могут принимать до семи параметров...

Такое?

Автор: dAlex 4.3.2011, 11:23
Gluttton, по второй ссылке вроде то, спасибо, буду смотреть =))

Автор: dAlex 9.3.2011, 11:05
что-то не получается написать строчку, анологичную этой

Код

MainWindow.Instance.Dispatcher.BeginInvoke(new AddDataByNewTradeDelegate(AddDataByNewTrade), myTrade);


как ни извращаюсь, компилятор ругается
Код

MainWindow.Instance.Dispatcher.BeginInvoke(new delegate {AddAlgA0Row(MyTrade myTrade);}, myTrade);

Автор: -Mikle- 9.3.2011, 21:31
вариант 1: MainWindow.Instance.Dispatcher.BeginInvoke((Action)delegate { AddAlgA0Row(myTrade); });
вариант 2: MainWindow.Instance.Dispatcher.BeginInvoke((Action)(() => AddAlgA0Row(myTrade)));
вариант 3: MainWindow.Instance.Dispatcher.BeginInvoke(new Action<MyTrade>(AddAlgA0Row), myTrade);
вариант 4: MainWindow.Instance.Dispatcher.BeginInvoke((Action<MyTrade>)AddAlgA0Row, myTrade);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)