Maison  >  Article  >  développement back-end  >  Quelle est la différence entre les fonctions virtuelles et les fonctions abstraites en C# ?

Quelle est la différence entre les fonctions virtuelles et les fonctions abstraites en C# ?

WBOY
WBOYavant
2023-08-29 10:37:05782parcourir

C# 中的虚函数和抽象函数有什么区别?

Les méthodes abstraites ne fournissent pas d'implémentation, elles forcent les classes dérivées à remplacer la méthode. Il est déclaré sous classe abstraite. Les méthodes abstraites n'ont que des définitions de méthode

Les méthodes virtuelles ont une implémentation, contrairement aux méthodes abstraites, elles peuvent exister dans des classes abstraites et non abstraites. Il donne aux classes dérivées la possibilité de le remplacer.

Fonctions virtuelles

Le mot-clé virtual est utile lors de la modification de méthodes, de propriétés, d'indexeurs ou d'événements. Vous pouvez utiliser des fonctions virtuelles lorsque vous avez défini une fonction dans une classe et que vous souhaitez implémenter cette fonction dans des classes héritées. Les fonctions virtuelles peuvent avoir différentes implémentations dans différentes classes héritées, et les appels à ces fonctions seront déterminés au moment de l'exécution.

Ce qui suit est une fonction virtuelle -

public virtual int area() { }

L'exemple suivant montre comment utiliser une fonction virtuelle -

Exemple

Démonstration en direct

using System;

namespace PolymorphismApplication {
   class Shape {
      protected int width, height;
      public Shape( int a = 0, int b = 0) {
         width = a;
         height = b;
      }
      public virtual int area() {
         Console.WriteLine("Parent class area :");
         return 0;
      }
   }
   class Rectangle: Shape {
      public Rectangle( int a = 0, int b = 0): base(a, b) {
      }
      public override int area () {
         Console.WriteLine("Rectangle class area ");
         return (width * height);
      }
   }
   class Triangle: Shape {
      public Triangle(int a = 0, int b = 0): base(a, b) {
      }
      public override int area() {
         Console.WriteLine("Triangle class area:");
         return (width * height / 2);
      }
   }
   class Caller {
      public void CallArea(Shape sh) {
         int a;
         a = sh.area();
         Console.WriteLine("Area: {0}", a);
      }
   }
   class Tester {
      static void Main(string[] args) {
         Caller c = new Caller();
         Rectangle r = new Rectangle(10, 7);
         Triangle t = new Triangle(10, 5);

         c.CallArea(r);
         c.CallArea(t);
         Console.ReadKey();
      }
   }
}

Sortie

Rectangle class area
Area: 70
Triangle class area:
Area: 25

Fonction abstraite

Le mot-clé abstract en C# est utilisé pour abstrait les classes et les abstractions fonctionnent. Les classes abstraites en C# incluent des méthodes abstraites et des méthodes non abstraites.

Voici un exemple de fonction abstraite dans une classe abstraite en C# -

Example

Live Demo

using System;
public abstract class Vehicle {
   public abstract void display();
}
public class Bus : Vehicle {
   public override void display() {
      Console.WriteLine("Bus");
   }
}
public class Car : Vehicle {
   public override void display() {
      Console.WriteLine("Car");
   }
}
public class Motorcycle : Vehicle {
   public override void display() {
      Console.WriteLine("Motorcycle");
   }
}
public class MyClass {
   public static void Main() {
      Vehicle v;
      v = new Bus();
      v.display();
      v = new Car();
      v.display();
         v = new Motorcycle();
      v.display();
   }
}

Output

Bus
Car
Motorcycle

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer