Einführung in das Überschreiben in C #
Überschreiben in C # ist die Neuimplementierung einer Basisklassenmethode in einer abgeleiteten Klasse. In diesem Fall wird die Basisklassenmethode in der untergeordneten Klasse überschrieben. Die abgeleitete Klassenmethode hat denselben Namen und dieselbe Signatur wie die Basisklassenmethode. Das Überschreiben ist nützlich, um einen Runtime-Polymorphismus zu erzielen.
Es gibt einige Schlüsselwörter, die beim Überschreiben von Methoden verwendet werden.
1. Virtual - Dieses Schlüsselwort wird mit einer Basisklasse verwendet, die angibt, dass die Methode einer Basisklasse überschrieben werden kann.
public virtual void Method()
(
// implementation
)
2. Override - Dieses Schlüsselwort wird mit einer abgeleiteten Klasse verwendet, die angibt, dass diese abgeleitete Klasse eine Methode einer Basisklasse überschreibt.
public override void Method()
(
// implementation
)
3. Base - Dieses Schlüsselwort wird in einer abgeleiteten Klasse zum Aufrufen der Basisklassenmethode verwendet.
public override void Method()
(
base.Method();
// implementation
)
Wie funktioniert das Überschreiben in C #?
Im Folgenden finden Sie ein Beispiel dafür, wie das Überschreiben in C # implementiert werden kann.
class Parent
(
public virtual void Demo() // base class
(
Console.WriteLine(“This is parent”);
)
)
class Child: Parent
(
public override void Demo() // derived class
(
Console.WriteLine(“This is child”);
)
)
Im obigen Beispiel gibt es zwei Klassen, eine Basisklasse oder übergeordnete Klasse und die andere abgeleitete Klasse, oder wir können sagen, untergeordnete Klasse. Eine Basisklassenmethode wird in einer untergeordneten Klasse abgeleitet. In diesem Fall ist die Methode in einem übergeordneten Element virtuell, was bedeutet, dass sie von der untergeordneten Klasse überschrieben werden kann. Überschreiben in einem untergeordneten Element bedeutet, dass diese Methode mit der übergeordneten Klassenmethode mit derselben Methodensignatur identisch ist.
Arten des Überschreibens in C #
Unten sehen Sie die Beispiele, die das Überschreiben mit verschiedenen Schlüsselwörtern zeigen.
Beispiel 1 - Ohne virtuelle und Überschreibungsschlüsselwörter
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Overriding
(
class Bird // base class
(
public void fly() // base class method
(
Console.WriteLine("Birds are flying");
)
)
class Peacock : Bird // derived class
(
public new void fly() // derived class method
(
Console.WriteLine("Peacock is flying");
)
)
class Program
(
// main method
static void Main(string() args)
(
Bird b = new Peacock();
b.fly();
Console.ReadLine();
)
)
)
Im obigen Beispiel wird kein Schlüsselwort sowohl in den Basen als auch in den abgeleiteten Methoden verwendet.
In der Hauptmethode wird die übergeordnete Referenz verwendet, um die untergeordnete Methode aufzurufen. Wenn in diesem Fall kein Schlüsselwort verwendet wird, wird die übergeordnete Methode anstelle einer untergeordneten Methode aufgerufen. So wird die Ausgabe sein
Ausgabe :
Beispiel 2 (a) - Mit virtuellen und Überschreibungsschlüsselwörtern
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Overriding
(
class Bird // base class
(
public virtual void fly() // base class method
(
Console.WriteLine("Birds are flying");
)
)
class Peacock : Bird // derived class
(
public override void fly() // derived class method
(
Console.WriteLine("Peacock is flying");
)
)
class Program
(
// main method
static void Main(string() args)
(
Bird b = new Peacock();
b.fly();
Console.ReadLine();
)
)
)
In diesem Beispiel wird virtual in der Basisklasse verwendet. Dies bedeutet, dass die untergeordnete Klasse die Berechtigung erhält, die Methode auf ihre eigene Weise zu implementieren. In einer abgeleiteten Klasse wird override verwendet, was bedeutet, dass die untergeordnete Methode die override-Methode ist. Beide Methoden sind mit demselben Namen und derselben Methodensignatur identisch, der Implementierungsteil ist jedoch unterschiedlich. In diesem Beispiel wird auch die übergeordnete Referenz verwendet, um die untergeordnete Methode aufzurufen. Da jedoch eine übergeordnete Methode eine virtuelle Methode ist, wird die untergeordnete Methode zuerst anstelle der übergeordneten Methode aufgerufen. So wird die Ausgabe sein
Ausgabe :
Beispiel 2 (b) - Virtuelle Schlüsselwörter und Überschreibschlüsselwörter
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Overriding
(
class Bird // base class
(
public virtual void fly() // base class method
(
Console.WriteLine("Birds are flying");
)
)
class Peacock : Bird // derived class
(
public override void fly() // derived class method
(
Console.WriteLine("Peacock is flying");
)
)
class Program
(
//main method
static void Main(string() args)
(
Peacock p = new Peacock();
p.fly();
Console.ReadLine();
)
)
)
Dieses Beispiel ist mit dem vorherigen Beispiel identisch, aber diese untergeordnete Methode wird als Referenz verwendet.
Ausgabe :
Beispiel 3 - Mit Basisschlüsselwort
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Overriding
(
class Bird // base class
(
public virtual void fly() // base class method
(
Console.WriteLine("Birds are flying");
)
)
class Peacock : Bird // derived class
(
public override void fly() // derived class method
(
base.fly(); // base is use to call parent method
Console.WriteLine("Peacock is flying");
)
)
class Program
(
static void Main(string() args)
(
Peacock p = new Peacock();
p.fly();
Console.ReadLine();
)
)
)
Im obigen Beispiel wird die Basis in einer abgeleiteten Klasse zum Aufrufen der Basisklassenmethode verwendet. In dieser Basismethode wird also zuerst die abgeleitete Methode aufgerufen.
Ausgabe :
Beispiel 4 - Abstrakte Klassen mit Überschreiben
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Overriding
(
abstract class Calculate
(
public abstract int sum();
)
class Values : Calculate // derived class
(
int val1;
int val2;
public Values(int a = 0, int b = 0)
(
val1 = a;
val2 = b;
)
public override int sum()
(
Console.WriteLine("sum of two values");
return (val1 + val2);
)
)
class Program
(
static void Main(string() args)
(
Values v = new Values(10, 20);
int a = v.sum();
Console.WriteLine(a);
Console.ReadLine();
)
)
)
Im obigen Beispiel wird eine abstrakte Methode verwendet. Eine abstrakte Klasse wird von der abgeleiteten Klasse implementiert, die eine abstrakte Methode enthält.
Ausgabe :
Regeln für das Überschreiben von Methoden
- Die Methodensignatur einer abgeleiteten Klasse sollte mit einer Basisklasse identisch sein.
- Überschreiben ist in derselben Klasse nicht möglich.
- Zugriffsmodifikatoren müssen für virtuelle Methoden und Überschreibungsmethoden identisch sein.
- Das Schlüsselwort virtual wird in der Basisklassenmethode und Override in einer abgeleiteten Klassenmethode verwendet.
- Die Basisklassenmethode sollte nicht statisch sein.
Fazit
Das Überschreiben ist beim Laufzeitpolymorphismus hilfreich. Abgeleitete Klassen können eine Basisklassenmethode auf ihre eigene Weise implementieren. Die Implementierung der Methode unterscheidet sich von der abgeleiteten Klasse von der Basisklasse. Die überschriebene Methode kann virtuell, überschrieben oder abstrakt sein.
Empfohlene Artikel
Dies ist eine Anleitung zum Überschreiben in C #. In diesem Abschnitt wird die Verwendung von Überschreibungen und anderen Schlüsselwörtern für das Überschreiben in C # zusammen mit Beispielen erläutert. Sie können auch unsere anderen Artikelvorschläge durchgehen -
- Ausnahmebehandlung in C #
- Arrays in C #
- Methodenüberschreibung in C #
- Variablen in C #
- Zugriffsmodifikatoren in PHP
- Polymorphismus in Java
- Abstrakte Klassen in JavaScript
- Beispiele für dieses Schlüsselwort