Sichere Typumwandlung von Basisklassenobjekten in abgeleitete Klassenreferenzen in C#
Das direkte Umwandeln eines Basisklassenobjekts in eine abgeleitete Klassenreferenz in C# ist riskant und führt häufig zu Laufzeitausnahmen. Dies liegt daran, dass eine abgeleitete Klassenreferenz ein Objekt seines eigenen Typs oder null erwartet.
Anschauliches Beispiel:
<code class="language-csharp">object o = new object(); string s = (string)o; // This will throw an exception at runtime</code>
Der Versuch, nach dieser unsicheren Umwandlung auf abgeleitete Klassenmitglieder zuzugreifen, führt zu einem Fehler:
<code class="language-csharp">int i = s.Length; // Runtime exception: InvalidCastException</code>
Die Variable o
enthält ein Basisklassenobjekt, das mit abgeleiteten Klassenmitgliedern wie Length
nicht kompatibel ist.
Um Laufzeitfehler zu vermeiden, überprüfen Sie vor der Umwandlung immer den tatsächlichen Typ des Objekts. Der is
-Operator und der Mustervergleich bieten sichere Alternativen:
<code class="language-csharp">object o = new object(); if (o is string str) { int i = str.Length; // Safe access to Length } else { // Handle the case where o is not a string } // Or using pattern matching: if (o is string s2) { int length = s2.Length; }</code>
Alternativ können Sie Ihr Klassendesign neu bewerten. Wenn eine häufige Umwandlung zwischen Basis- und abgeleiteten Klassen erforderlich ist, kann dies auf einen Fehler in der Vererbungshierarchie hinweisen. Eine Umgestaltung, um solche Umwandlungen überflüssig zu machen, ist oft die bessere Lösung. Erwägen Sie gegebenenfalls die Verwendung von Schnittstellen oder Komposition anstelle von Vererbung.
Das obige ist der detaillierte Inhalt vonWie kann man Basisklassenobjekte sicher in abgeleitete Klassenreferenzen in C# umwandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!