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
Libérer: 2025-01-18 12:18:09
original
779 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal