Maison développement back-end Tutoriel C#.Net Journal d'apprentissage C# 23 --- Polymorphisme : surcharge d'opérateurs, surcharge de méthodes, classes abstraites, méthodes virtuelles

Journal d'apprentissage C# 23 --- Polymorphisme : surcharge d'opérateurs, surcharge de méthodes, classes abstraites, méthodes virtuelles

Jan 21, 2017 pm 03:26 PM

La définition du polymorphisme en C# est la suivante : la même opération agit sur des instances de classes différentes, différentes classes l'interprètent différemment, et produisent finalement des résultats d'exécution différents. Autrement dit, une interface, plusieurs fonctions.

C# prend en charge 2 formes de polymorphisme : le polymorphisme au moment de la compilation, le polymorphisme au moment de l'exécution

Polymorphisme au moment de la compilation :

Le polymorphisme au moment de la compilation est obtenu par surcharge

Surcharge de méthode

Vous pouvez avoir plusieurs définitions du même nom de fonction dans la même portée. Les définitions de fonctions doivent différer les unes des autres, soit par le type de paramètres dans la liste des paramètres, soit par le nombre de paramètres. Les déclarations de fonction qui diffèrent uniquement par le type de retour ne peuvent pas être surchargées. Ecrivez un exemple

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace Test  
{  
    class exchange  //定义一个exchange类  
    {//方法实现交换两参数数据  
        public void swap(int a, int b)  
        {  
            int temp;  
            temp = a;  
            a = b;  
            b = temp;  
            Console.WriteLine("{0},{1}",a,b);  
        }  
        public void swap(string a, string b)  
        {  
            string temp;  
            temp = a;  
            a = b;  
            b = temp;  
            Console.WriteLine("{0},{1}", a, b);  
        }  
  
    }  
    class program  
    {  
        static void Main(string[] args)  
        {  
            exchange exch = new exchange();  
            exch.swap(10, 20);  //调用 swap(int a,int b)方法  
            exch.swap("大", "小");  //调用 swap(string a,string b)方法  
          
        }  
    }  
}
Copier après la connexion

Résultat :

Journal dapprentissage C# 23 --- Polymorphisme : surcharge dopérateurs, surcharge de méthodes, classes abstraites, méthodes virtuelles

Surcharge des opérateurs

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace Test  
{  
    class student  //定义student类  
    {  
        private int Chinese;  
        private int Math;  
        public void value(int a, int b)  //定义一个赋值的方法,以后学了构造方法就不这么麻烦了  
        {  
            Chinese = a;  
            Math = b;  
        }  
        public static student operator + (student a, student b) //运算符重载,实现相加功能  
        {  
            student stu = new student();  
            stu.Chinese = a.Chinese + b.Chinese;  
            stu.Math = a.Math + b.Math;  
            return stu;  
        }  
        public int getChinese()  //获取Chinese 的方法  
        {  
            return Chinese;  
        }  
        public int getMath()  //获取Math 的方法  
        {  
            return Math;  
        }  
    }  
    class program  
    {  
        static void Main(string[] args)  
        {  
            student a = new student();  
            student b = new student();  
            a.value(70,80);  
            b.value(40, 50);  
            student stu = a + b;  //70+40, 80+50  
            Console.WriteLine("a+b Chinese = {0}\na+b Math = {1}", stu.getChinese(), stu.getMath());  
              
        }  
    }  
}
Copier après la connexion

Résultat :

Journal dapprentissage C# 23 --- Polymorphisme : surcharge dopérateurs, surcharge de méthodes, classes abstraites, méthodes virtuelles

Polymorphisme d'exécution :

Le polymorphisme d'exécution signifie que ce n'est que lorsque le système est en cours d'exécution qu'il est décidé quelle opération implémenter en fonction de la situation réelle. Implémenté via des classes abstraites. ou des méthodes virtuelles.

Classes abstraites et méthodes abstraites

C# vous permet d'utiliser le mot-clé abstract pour créer des classes abstraites ou des méthodes abstraites Lorsqu'une classe dérivée hérite de la classe abstraite, l'implémentation est terminée. Les classes abstraites contiennent des méthodes abstraites, qui peuvent être implémentées par des classes dérivées. Les classes dérivées ont des fonctionnalités plus spécialisées. Les classes abstraites ne peuvent pas être instanciées,

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace Test  
{//创建抽象类和抽象方法  
   abstract class score  
    {  
       public abstract int Add();  
    }  
    //创建子类  
   class student : score  
   {  
       private int Chinese = 80;  
       private int Math = 90;  
       public override int Add()  //关键字 override 实例方法  
       {  
          int sum=Chinese+Math;  
           return sum;  
       }  
         
   }  
    class program  
    {  
        static void Main(string[] args)  
        {  
            student stu = new student();  
                
            Console.WriteLine(stu.Add() );  //结果 170  
             
        }  
    }  
}
Copier après la connexion

méthodes virtuelles

Les méthodes virtuelles sont déclarées à l'aide du mot clé virtual. Les méthodes virtuelles peuvent avoir différentes implémentations dans différentes classes héritées. Les appels aux méthodes virtuelles se produisent au moment de l'exécution.

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace Test  
{  
   class score  
    {  
       protected int Chinese = 80;  
       protected int Math = 90;  
       public virtual int Add()  //定义一个虚方法  
       {  
           int sum = Chinese + Math;  
           return sum;  
       }  
    }  
   //定义子类,实现方法  
   class student : score  
   {  
       public override int Add()  //关键字 override 实例方法,实现相减操作  
       {  
           int sub = Math - Chinese ;  
           return sub;  
       }  
         
   }  
    class program  
    {  
        static void Main(string[] args)  
        {  
            student stu = new student();  
                
            Console.WriteLine(stu.Add() );  //结果 10  
             
        }  
    }  
}
Copier après la connexion

Nous pouvons voir que la méthode réellement appelée au moment de l'exécution n'est pas une méthode virtuelle, mais la méthode après l'instance de remplacement

Ce qui précède est le journal d'apprentissage C# 23 --- Polymorphisme pour Pour plus d'informations sur la surcharge d'opérateurs, la surcharge de méthodes, les classes abstraites et les méthodes virtuelles, veuillez faire attention au site Web PHP chinois (www.php.cn) pour plus de contenu connexe !


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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment l'héritage et le polymorphisme affectent-ils le couplage de classes en C++ ? Comment l'héritage et le polymorphisme affectent-ils le couplage de classes en C++ ? Jun 05, 2024 pm 02:33 PM

L'héritage et le polymorphisme affectent le couplage des classes : l'héritage augmente le couplage car la classe dérivée dépend de la classe de base. Le polymorphisme réduit le couplage car les objets peuvent répondre aux messages de manière cohérente via des fonctions virtuelles et des pointeurs de classe de base. Les meilleures pratiques incluent l'utilisation de l'héritage avec parcimonie, la définition d'interfaces publiques, l'évitement de l'ajout de données membres aux classes de base et le découplage des classes via l'injection de dépendances. Un exemple pratique montrant comment utiliser le polymorphisme et l'injection de dépendances pour réduire le couplage dans une application de compte bancaire.

Quel rôle le destructeur joue-t-il dans le polymorphisme en C++ ? Quel rôle le destructeur joue-t-il dans le polymorphisme en C++ ? Jun 03, 2024 pm 08:30 PM

Les destructeurs sont cruciaux dans le polymorphisme C++, garantissant que les objets de classe dérivée nettoient correctement la mémoire lorsqu'ils sont détruits. Le polymorphisme permet à des objets de types différents de répondre au même appel de méthode. Le destructeur est automatiquement appelé lorsqu'un objet est détruit pour libérer sa mémoire. Le destructeur de classe dérivée appelle le destructeur de classe de base pour garantir que la mémoire de la classe de base est libérée.

Quels sont les avantages et les inconvénients du polymorphisme en C++ ? Quels sont les avantages et les inconvénients du polymorphisme en C++ ? Jun 04, 2024 pm 08:08 PM

Avantages et inconvénients du polymorphisme C++ : Avantages : Réutilisabilité du code : le code commun peut gérer différents types d'objets. Extensibilité : ajoutez facilement de nouvelles classes sans modifier le code existant. Flexibilité et maintenabilité : la séparation du comportement et du type améliore la flexibilité du code. Inconvénients : surcharge d'exécution : la répartition des fonctions virtuelles entraîne une augmentation de la surcharge. Complexité du code : plusieurs hiérarchies d'héritage ajoutent de la complexité. Taille binaire : l'utilisation de la fonction virtuelle augmente la taille du fichier binaire. Cas pratique : Dans la hiérarchie des classes d'animaux, le polymorphisme permet à différents objets animaux d'émettre des sons via des pointeurs animaux.

Comment la surcharge de fonctions C++ atteint-elle le polymorphisme ? Comment la surcharge de fonctions C++ atteint-elle le polymorphisme ? Apr 13, 2024 pm 12:21 PM

La surcharge de fonctions peut être utilisée pour obtenir un polymorphisme, dans lequel une méthode de classe dérivée est appelée via un pointeur de classe de base et le compilateur sélectionne la version surchargée en fonction des types de paramètres réels. Dans l'exemple, la classe Animal définit une fonction virtuelle makeSound() et les classes Dog et Cat réécrivent cette fonction. Lorsque makeSound() est appelée via le pointeur Animal*, le compilateur appellera la version remplacée correspondante en fonction de l'objet pointé. type, réalisant ainsi le polymorphisme sexuel.

Interfaces Java et classes abstraites : la route vers le paradis de la programmation Interfaces Java et classes abstraites : la route vers le paradis de la programmation Mar 04, 2024 am 09:13 AM

Interface : une interface de contrat sans implémentation définit un ensemble de signatures de méthodes en Java mais ne fournit aucune implémentation concrète. Il agit comme un contrat qui oblige les classes qui implémentent l'interface à implémenter ses méthodes spécifiées. Les méthodes de l'interface sont des méthodes abstraites et n'ont pas de corps de méthode. Exemple de code : publicinterfaceAnimal{voideat();voidsleep();} Classe abstraite : plan partiellement implémenté Une classe abstraite est une classe parent qui fournit une implémentation partielle dont ses sous-classes peuvent hériter. Contrairement aux interfaces, les classes abstraites peuvent contenir des implémentations concrètes et des méthodes abstraites. Les méthodes abstraites sont déclarées avec le mot-clé abstract et doivent être remplacées par des sous-classes. Exemple de code : publicabstractcla

Le rôle des types de valeur de retour de fonction C++ dans le polymorphisme Le rôle des types de valeur de retour de fonction C++ dans le polymorphisme Apr 13, 2024 pm 09:12 PM

Dans le polymorphisme, le type de valeur de retour de fonction spécifie le type d'objet spécifique renvoyé lorsqu'une classe dérivée remplace une méthode de classe de base. Le type de valeur de retour d'une méthode de classe dérivée peut être le même que la classe de base ou plus spécifique, permettant de renvoyer davantage de types dérivés, augmentant ainsi la flexibilité.

Comment le polymorphisme prend-il en charge le développement orienté objet en C++ ? Comment le polymorphisme prend-il en charge le développement orienté objet en C++ ? Jun 03, 2024 pm 10:37 PM

Le polymorphisme est un concept de programmation orientée objet qui permet aux objets d'exister sous plusieurs formes, rendant le code plus flexible, évolutif et maintenable. Le polymorphisme en C++ exploite les fonctions virtuelles et l'héritage, ainsi que les fonctions virtuelles pures et les classes abstraites pour implémenter la liaison dynamique, nous permettant de créer des hiérarchies de classes qui modifient le comportement en fonction du type réel de l'objet. En pratique, le polymorphisme nous permet de créer des pointeurs de classe de base vers différents objets de classe dérivés et d'appeler les fonctions appropriées en fonction du type réel de l'objet.

Polymorphisme de remplacement de fonctions et d'héritage : l'art de réaliser des appels flexibles entre objets Polymorphisme de remplacement de fonctions et d'héritage : l'art de réaliser des appels flexibles entre objets May 02, 2024 am 10:30 AM

La réécriture de fonctions et le polymorphisme hérité sont deux concepts clés de la POO pour obtenir des appels d'objets flexibles : Réécriture de fonctions : la classe dérivée redéfinit la fonction du même nom dans la classe de base et exécute l'implémentation spécifique dans la classe dérivée lorsqu'elle est appelée. Polymorphisme d'héritage : Une classe dérivée peut être utilisée de la même manière qu'une classe de base, et lorsqu'une méthode est appelée via une référence de classe de base, son implémentation dans la classe dérivée est exécutée.

See all articles