Heim > Backend-Entwicklung > C++ > Wie kann man Basisklassenobjekte sicher in abgeleitete Klassenreferenzen in C# umwandeln?

Wie kann man Basisklassenobjekte sicher in abgeleitete Klassenreferenzen in C# umwandeln?

Mary-Kate Olsen
Freigeben: 2025-01-18 12:18:09
Original
779 Leute haben es durchsucht

How to Safely Typecast Base Class Objects to Derived Class References in C#?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage