Maison > développement back-end > C++ > Pouvons-nous attribuer directement un objet de classe de base à une référence de classe dérivée en C# ?

Pouvons-nous attribuer directement un objet de classe de base à une référence de classe dérivée en C# ?

Susan Sarandon
Libérer: 2025-01-18 12:02:08
original
846 Les gens l'ont consulté

Can We Directly Assign a Base Class Object to a Derived Class Reference in C#?

Un objet de classe de base en C# peut-il être directement affecté à une référence de classe dérivée ?

Dans les langages de programmation orientés objet tels que C#, l'héritage de classe établit une relation parent-enfant entre les classes, et les classes dérivées héritent des propriétés et méthodes de leurs classes de base. Cela soulève une question : un objet de classe de base peut-il être affecté directement à une référence de classe dérivée à l'aide d'une conversion de type explicite ?

De nombreux programmeurs rencontrent ce problème lorsqu'ils tentent d'utiliser le transtypage pour la conversion de type au sein d'une hiérarchie de classes. Cependant, il est important de comprendre que ce type d’affectation n’est pas autorisé en C#. La raison réside dans la nature inhérente des références de classe et dans leur relation avec les objets réels qu’elles représentent.

En programmation orientée objet, une référence est un pointeur vers un objet réel en mémoire. Une référence de classe dérivée contient un pointeur vers une instance de classe dérivée. L'affectation d'un objet de classe de base à une référence de classe dérivée signifie que la référence pointera vers un objet qui ne possède pas toutes les propriétés et méthodes attendues par la classe dérivée. Cela peut provoquer des erreurs d'exécution et un comportement inattendu.

Considérons l'exemple suivant :

<code class="language-csharp">class Animal { public void Eat() { } }
class Dog : Animal { public void Bark() { } }

Animal animal = new Animal();
Dog dog = (Dog)animal; // 错误:InvalidCastException</code>
Copier après la connexion

Ici, essayer d'attribuer l'objet de classe de base animal au chien de référence de la classe dérivée entraînera une InvalidCastException car l'objet animal n'a pas la méthode Bark() présente dans la classe Dog.

Afin d'obtenir une compatibilité de type correcte, vous devez vous assurer que l'objet référencé par la référence de classe dérivée est réellement une instance de la classe dérivée. Cela peut être accompli en créant une instance de la classe dérivée et en l'attribuant à la référence, plutôt qu'en essayant de convertir l'objet de classe de base en une référence de classe dérivée.

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