allgemeine Gussprobleme in WPF UserControls
lösenWPF -Anwendungen verwenden häufig Basis -Usercontrols als Vorlagen für spezialisierte, abgeleitete Usercontrols. Dieses Setup kann jedoch zu Schwierigkeiten führen, wenn sie generische Typen zwischen diesen Kontrollen gießen.
Gussschwierigkeiten
abgeleitete UserControls verarbeiten Ereignisse häufig, indem sie Methoden in ihrer Basis -Usercontrol aufrufen. Diese Basismethoden erwarten möglicherweise einen spezifischen generischen DataContext -Typ. Wenn der DataContext des abgeleiteten UserControl ein abgeleiteter generischer Typ ist (z. B. BaseViewModel<wire>
statt BaseViewModel<part>
), führt der Versuch, ihn auf den erwarteten Typ des Basis -UserControl zu werfen
InvalidCastException
Die Wurzel des Problems
Dieser Casting -Versagen beruht auf der grundlegenden Natur der Generika. Jede generische Instanziierung ist wie und ein ausgeprägter Typ. Das Gießen von
bis wird nicht zugelassen, weil es Inkonsistenzen erzeugen könnte.
List<wolf>
Zum Beispiel würde ein Guss von List<animal>
zu List<wolf>
zulassen, ein List<animal>
(ein Tier, aber kein Wolf) hinzuzufügen. Dies würde ein ungültiges ein unangemessenes Element erzeugen.
List<wolf>
Vermeiden Sie Gussfehler List<animal>
Sheep
List<wolf>
Direktes Casting von bis ist von Natur aus unsicher und sollte vermieden werden.
Bessere Lösungen
Generic<derived>
Anstatt zu gießen, sollten Sie die Verwendung von Co- und Kontravarianz in Betracht ziehen. Dieser Ansatz ermöglicht die Kompatibilität zwischen generischen Typen, ist jedoch nur für Schnittstellen und nicht für Klassen geeignet. Alternative Entwurfsmuster wie Abhängigkeitsinjektion oder Verwendung nicht generischer Basisklassen/Schnittstellen können für die Lösung dieses Problems besser geeignet sein. Generic<base>
Das obige ist der detaillierte Inhalt vonWie kann ich in WPF UserControls unverfremdbare generische Gussprobleme lösen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!