有没有更好的方法来使用泛型?

时间:2012-08-08 02:45:48

标签: c# generics

这是我的代码。我是仿制药的新手,所以只是想知道是否有更好的方法来做我做过的事情。

public interface IMessageHandler<T>  where T : IMessage
{
    void Handle(T message);
}

public class MessageANotificationHandler : IMessageHandler<MessageA>
{
    public void Handle(MessageA message)
    {
        // do something;
    }

}

现在我希望我的应用程序接收所有实现IMessage的消息,但是自动计算出用于特定消息的处理程序。我已经完成了以下工作,但感觉还有更好的方法

public class MessageHandlerFactory
{
    public Type GetMessageHandlerType(IMessage message)
    {
        if (message.GetType() == typeof(MessageA))
            return typeof(MessageANotificationHandler);

        return null;
    }
}

然后在我的应用程序中,我使用反射来创建工厂返回的类型的实例并调用Handle方法。

如果您知道如何更好地使用此代码,请提供帮助。

由于

2 个答案:

答案 0 :(得分:2)

我会删除工厂和IMessageHandler界面......不需要它们。

我会将Handle方法添加到IMessage接口,而不是这样:

public void HandleMessageFor(IMessage msg) {
    Type t = new MessageHandlerFactory().GetMessageHandlerType(msg);
    // Activator.CreateInstance.. etc etc..
}

你可以简单地拥有..

public void HandleMessageFor(IMessage msg) {
    msg.Handle();
}

答案 1 :(得分:0)

您可以将IMessage改为抽象基类,并使用方法:

public abstract class MessageBase {
    public abstract IMessageHandler GetHandler();
}

这需要IMessageHandler为非通用的。