【发布时间】:2010-08-12 16:51:34
【问题描述】:
我有一组消息,它们都派生自 Message,并实现接口 IMessage:
class Message : IMessage
{
public string example1;
}
class LogOnMessage : Message
{
public string password;
}
class LogOffMessage : Message
{
public string anotherExample;
}
我有一个消息传递系统,其中代理能够检测传入的消息,并根据消息的类型运行表单的委托
void MyDelegate(IMessage msg)
这是通过像这样调用处理程序注册函数来完成的:
RegisterHandler(typeof(LogoffMessage),handler)
对此的实现只是一个类型的字典,每个条目都是一个处理程序列表:Dictionary >
现在,这一切都很好,但处理程序当然看起来像这样:
void MyHandler(IMessage msg)
{
LogOffMessage lMsg = (LogOffMessage)msg;
string athrEx = lMsg.anotherExample;
//Proceed with handling the logoff
}
现在,这有几个问题。一是您可能会尝试将 Msg 转换为错误的类型。
另一个是,在任何处理程序的前几行中都必须解开所有内容,而不是拥有像这样的处理程序,我想拥有这样的处理程序有点不雅:
void MyDelegate(LogOffMessage msg)
你会提出什么建议?
我在想也许不是类型字典,而是可以使用一些其他结构来保存不同的委托类型,使用泛型。因此,每种类型都会有一个 MyDelegate 列表。但是目前还不清楚如何制作集合的集合,其中每个内部集合类型不同。
【问题讨论】:
标签: c# .net inheritance interface