我正在从二进制流中解码通信消息。根据到达的消息类型,我创建不同类型的消息对象。它们都派生自一个基础的CommsMessage类型。一切都很好。
在我的代码的其他地方,我需要对这些消息做出反应,因此我需要知道它是什么类型的消息。
目前我正在执行以下操作:
在我的代码的其他地方,我需要对这些消息做出反应,因此我需要知道它是什么类型的消息。
目前我正在执行以下操作:
void ProcessIncomingMessage(CommsMessage msg)
{
if (msg is MessageType1)
return ProcessMessageType1(msg as MessageType1);
if (msg is MessageType2)
return ProcessMessageType2(msg as MessageType2);
//etc
}
我想知道比较这些类型的性能成本,以及是否应该在基类中包含MessageType
属性。那么我可以这样做:
void ProcessIncomingMessage(CommsMessage msg)
{
switch (msg.MessageType)
{
case MessageType.Type1: return ProcessMessageType1(msg as MessageType1);
case MessageType.Type2: return ProcessMessageType2(msg as MessageType2);
//etc
}
}
是的,这是过早的优化,我可能在担心微不足道的细节,但我是那种喜欢知道底层情况的程序员,所以想知道两者之间的性能差异。我猜我对类型比较有偏见,因为我的C++背景中RTTI引入了开销,只是想知道.Net是否有类似的情况。