Как я должен создать обратный звонок - PullRequest
2 голосов
/ 04 апреля 2009

Каков наилучший способ написать обратный звонок? Мне нужно только вызвать 1 функцию, которая имеет знак void (string, int); и это должно было бы вызвать класс, так как у меня есть объекты-члены, которые мне нужно обработать. Какой лучший способ написать это? в C я бы передал указатель func и void * obj. мне это не нравится, и я подозреваю, что есть лучший способ сделать это в C #?

Ответы [ 3 ]

16 голосов
/ 04 апреля 2009

В C # 3.0 введены лямбда-выражения, которые позволяют отказаться от объявления сигнатур обратного вызова (или делегирования). Это позволяет вам делать такие вещи, как:

static void GiveMeTheDate(Action<int, string> action)
{
  var now = DateTime.Now;
  action(now.Day, now.ToString("MMMM"));
}

GiveMeTheDate((day, month) => Console.WriteLine("Day: {0}, Month: {1}", day, month));
// prints "Day: 3, Month: April"
4 голосов
/ 04 апреля 2009

Стандартный способ обработки (или замены необходимости) обратных вызовов в C # состоит в использовании делегатов или событий. Подробности см. В этом руководстве.

Это обеспечивает очень мощный и чистый способ обработки обратных вызовов.

1 голос
/ 04 апреля 2009

Это то, что вы имеете в виду?

thatfunc(params, it, wants, Func<myObject> myCallbackFunc)
{
    myObject obj = new Object(); 

    myCallbackFunc.Invoke(obj);

//or

    myCallbackFunc.Invoke(this);

//I wasn't sure what if myObject contained thatFunc or not...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...