Was ist der Unterschied zwischen virtuellen Funktionen und abstrakten Funktionen in C#?

WBOY
Freigeben: 2023-08-29 10:37:05
nach vorne
710 Leute haben es durchsucht

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

Abstrakte Methoden stellen keine Implementierung bereit, sie zwingen abgeleitete Klassen, die Methode zu überschreiben. Es wird unter der abstrakten Klasse deklariert. Abstrakte Methoden haben nur Methodendefinitionen. Virtuelle Methoden haben eine Implementierung. Im Gegensatz zu abstrakten Methoden können sie sowohl in abstrakten als auch in nicht abstrakten Klassen existieren. Es gibt abgeleiteten Klassen die Möglichkeit, es zu überschreiben.

Virtuelle Funktionen

Das virtuelle Schlüsselwort ist nützlich beim Ändern von Methoden, Eigenschaften, Indexern oder Ereignissen. Sie können virtuelle Funktionen verwenden, wenn Sie eine Funktion in einer Klasse definiert haben und diese Funktion in geerbten Klassen implementieren möchten. Virtuelle Funktionen können unterschiedliche Implementierungen in verschiedenen geerbten Klassen haben, und Aufrufe dieser Funktionen werden zur Laufzeit bestimmt.

Das Folgende ist eine virtuelle Funktion -

public virtual int area() { }
Nach dem Login kopieren

Das folgende Beispiel zeigt, wie eine virtuelle Funktion verwendet wird -

Beispiel

Live-Demonstration

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(); } } }
Nach dem Login kopieren

Ausgabe

Rectangle class area Area: 70 Triangle class area: Area: 25
Nach dem Login kopieren

Abstrakte Funktion

Das Schlüsselwort abstract in C# wird für abstrakt verwendet Klassen und Abstraktionen funktionieren. Abstrakte Klassen in C# umfassen abstrakte Methoden und nicht abstrakte Methoden.

Hier ist ein Beispiel einer abstrakten Funktion in einer abstrakten Klasse in C# –

Beispiel

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(); } }
Nach dem Login kopieren

Ausgabe

Bus Car Motorcycle
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen virtuellen Funktionen und abstrakten Funktionen in C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!