Учитывая эти C# классы (генерируется WCF, я не могу изменить эти):Производные классы в качестве возвращаемого значения
public SysState GetSysState();
public class SysState { /* nothing much here */}
public class Normal : SysState { /* properties & methods */ }
public class Foobar : SysState { /* different properties & methods */ }
Мой код (в настоящее время):
SysState result = GetSysState();
if (result is Normal) HandleNormal((Normal) result);
if (result is Foobar) HandleFoobar((Foobar) result);
Мой вопрос: Я все время чувствую, что мне не хватает чего-то очевидного, что я не должен явно проверять тип. Имею ли я старший момент?
+1 Я попробую это, спасибо. – egrunin
@egrunin: Если вы абсолютно не можете изменить классы вообще, то вы, очевидно, не сможете этого сделать, и вам придётся использовать «если это тип ... еще, если это другой тип ...» , Однако вы можете написать свои собственные классы-оболочки на стороне клиента, чтобы позаботиться об этой проблеме для вас. Классы-оболочки будут иметь эти классы в качестве их кишок и обеспечить открытый интерфейс, который выполняет полиморфизм. Вам все равно понадобится «if this type, then ...», но вам нужно будет написать его один раз, где он преобразует типы в ваши обертки. –