Étant donné ces classes C# (généré par la WCF, je ne peux pas changer ces):Les classes dérivées comme valeur de retour
public SysState GetSysState();
public class SysState { /* nothing much here */}
public class Normal : SysState { /* properties & methods */ }
public class Foobar : SysState { /* different properties & methods */ }
Mon code (actuellement):
SysState result = GetSysState();
if (result is Normal) HandleNormal((Normal) result);
if (result is Foobar) HandleFoobar((Foobar) result);
Ma question: Je continue à sentir qu'il me manque quelque chose d'évident, que je ne devrais pas avoir besoin de vérifier le type explicitement. Est-ce que j'ai un moment senior?
+1 Je vais essayer, merci. – egrunin
@egrunin: Si vous ne pouvez absolument pas modifier les classes, alors vous ne pouvez évidemment pas faire cela, et vous devrez utiliser "si c'est un type ... else si c'est un autre type ..." . Cependant, vous pouvez écrire vos propres classes wrapper sur le côté client pour prendre soin de ce problème pour vous. Les classes wrapper auraient ces classes comme leur guts, et fournir une interface publique qui fait du polymorphisme. Vous auriez toujours besoin du "si ce type, alors ...", mais vous auriez seulement à l'écrire une fois, où il convertit les types à vos wrappers. –