Я декодирую сообщения из двоичного потока. Я создаю объекты сообщений разных типов в зависимости от того, какие сообщения поступили. Все они происходят от базового типа 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 какое-то сходство.