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 :
object o = new object(); string s = (string)o; // This will throw an exception at runtime
Tenter d'accéder aux membres de la classe dérivée après cette conversion non sécurisée entraînera une erreur :
int i = s.Length; // Runtime exception: InvalidCastException
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 :
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; }
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!