Wenn ich einen Subtyps zu einem Supertyp Referenz zuweisen (Upcasting):Conditional Operator Zuordnung
IWService wService;
wService = new WService();
wService = new WServiceStub();
Warum kann ich ? :
sie in einem Bedingungsoperator nicht zuordnen?
IWService wService = isStub ? new WServiceStub() : new WService();
ich diesen Fehler:
Type of conditional expression cannot be determined because there is no implicit conversion between MyNamespace.WServiceStub and MyNamespace.WService
Aber es ist genug, um einen von ihnen zu dem Supertyp zu werfen zu kompilieren:
IWService wService = isStub ? (IWService)new WServiceStub() : new WService();
oder
IWService wService = isStub ? new WServiceStub() : (IWService)new WService();
I don Verstehe nicht, warum ich eine explizite Besetzung brauche, wenn ich nie ge t InvalidCastException
. Die Konvertierung ist immer sicher, oder?
Ist der folgende Code nicht genau derselbe?
IWService wService;
if (isStub)
{
wService = new WServiceStub();
}
else
{
wService = new WService();
}
Wenn WService und WServiceStub IDisposable sowie IWService implementieren, welchen Typ sollte der Ausdruck 'isStub? new WServiceStub(): new WService() 'have? – Heinzi