Избегайте кастинга делегата - PullRequest
0 голосов
/ 17 ноября 2011

Я бы хотел избежать приведения делегата каждый раз, когда я вызываю метод MarkAsPermanent.

Вот мое объявление делегата:

public delegate void Callback<T, U>(T arg1, U arg2);

Подпись метода, которую мне нужно вызвать:

class MessengerManager {
    static public void MarkAsPermanent(string eventType, Delegate _messageHandler) { ... }
}

Как я сейчас это называю:

MessengerManager.MarkAsPermanent( "level finished", ( Callback<LevelInfo, GameDataType> ) UpdateData );

Возможно ли сделать что-то подобное вместо этого:

MessengerManager.MarkAsPermanent( "level finished", UpdateData );

I 'хотелось бы не вводить ( Callback<LevelInfo, GameDataType> ) каждый раз.

Ответы [ 2 ]

2 голосов
/ 17 ноября 2011

Один очевидный ответ: напишите вспомогательный метод:

public static class LevelMessengerManager
{
    public static void MarkAsPermanent(string eventType,
        Callback<LevelInfo, GameDataType> messageHandler)
    {
        MessengerManager.MarkAsPermanent(eventType, messageHandler);
    }
}

Вы можете сделать его общим, если хотите. Тогда просто назовите это как:

LevelMessengerManager.MarkAsPermanent("level finished", UpdateData);

Предполагается, что объявление MessengerManager действительно должно использовать параметр Delegate - вы можете просто изменить этот метод вместо этого?

0 голосов
/ 17 ноября 2011

Это работает?

class MessengerManager {
    static public void MarkAsPermanent<T, U>(string eventType,  Callback<T, U> _messageHandler) { ... }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...