避免施放代表

时间:2011-11-17 18:00:22

标签: c# delegates

每次调用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 );

我想避免每次都输入( Callback<LevelInfo, GameDataType> )

2 个答案:

答案 0 :(得分:2)

一个明显的答案:写一个辅助方法:

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参数 - 您可以改变该方法吗?

答案 1 :(得分:0)

这有用吗?

class MessengerManager {
    static public void MarkAsPermanent<T, U>(string eventType,  Callback<T, U> _messageHandler) { ... }
}