Maison >développement back-end >C++ >Comment transtyper en toute sécurité des objets de classe de base en références de classe dérivées en C# ?
Transtypage sécurisé des objets de classe de base en références de classe dérivées en C#
La conversion directe d'un objet de classe de base en une référence de classe dérivée en C# est risquée et conduit souvent à des exceptions d'exécution. En effet, une référence de classe dérivée attend un objet de son propre type ou null.
Exemple illustratif :
<code class="language-csharp">object o = new object(); string s = (string)o; // This will throw an exception at runtime</code>
Tenter d'accéder aux membres de la classe dérivée après cette conversion non sécurisée entraînera une erreur :
<code class="language-csharp">int i = s.Length; // Runtime exception: InvalidCastException</code>
La variable o
contient un objet de classe de base, incompatible avec les membres de classe dérivés comme Length
.
Pour éviter les erreurs d'exécution, vérifiez toujours le type réel de l'objet avant de le lancer. L'opérateur is
et la correspondance de modèles offrent des alternatives sûres :
<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>
Vous pouvez également réévaluer la conception de votre classe. Si des conversions fréquentes entre les classes de base et dérivées sont nécessaires, cela peut indiquer un défaut dans la hiérarchie d'héritage. Refactoriser pour éliminer le besoin de tels transtypages est souvent une meilleure solution. Pensez à utiliser des interfaces ou une composition au lieu de l'héritage, le cas échéant.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!