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)方法 } } }
Résultat :
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()); } } }
Résultat :
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 } } }
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 } } }
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 !