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# ?

Comment transtyper en toute sécurité des objets de classe de base en références de classe dérivées en C# ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-18 12:18:09781parcourir

How to Safely Typecast Base Class Objects to Derived Class References in 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn