Überschreiben einer statischen Methode in C#
-
Überschreiben einer statischen Methode in
C#
-
Alternative Methode zum Überschreiben einer statischen Methode in
C#
In diesem Artikel besprechen wir das Überschreiben der statischen Methode einer abstrakten Basisklasse.
Überschreiben einer statischen Methode in C#
Erstens können wir keine statische Methode überschreiben, die zu einer abstrakten Basisklasse gehört. Das ist in C# nicht möglich.
Denn der Ausdruck statisch bezieht sich auf etwas, das für alle gilt, während die übergeordnete Idee das ist, was wir verwenden, um die Implementierung gemäß unseren Anforderungen zu ändern.
Wenn wir eine statische Methode überschreiben, verlieren wir die zugehörige statische Eigenschaft. Folglich können statische Methoden in C# nicht überschrieben werden.
Wir können jedoch die Regeln brechen und die Aufgabe in umgekehrter Reihenfolge ausführen, um die Anforderungen zu erfüllen.
Alternative Methode zum Überschreiben einer statischen Methode in C#
Verstecken ist eine Idee, die verwendet werden kann, und es ist möglich, sie zu verwenden. Diese Idee ist auch für Early Binding und Late Binding von Bedeutung, die beim Erstellen virtueller Funktionen verwendet werden.
Wenn zur Laufzeit basierend auf der Instanz virtuelle Methodenimplementierungen ausgewählt werden, wird dies als Überschreiben bezeichnet. Wenn beim Erstellen mehr als eine Methode mit demselben Namen ausgewählt wird, wird dies als Überladen bezeichnet.
Das Überladen ist eher eine Bequemlichkeit als eine wesentliche Komponente des objektorientierten Polymorphismus.
Das Überladen statischer Methoden kann zunächst dem Überschreiben ähneln. Der Compiler sucht in der Vererbungsstruktur nach oben, bis er eine passende Methode findet, wenn er keine statische Methode in der bereitgestellten Klasse finden kann.
Die Methode wird zur Buildzeit aufgelöst und korrigiert, was ein wesentlicher Unterschied ist. Da dies kein echtes Überschreiben ist, können Sie statische Methoden nicht als virtuell
, überschreiben
oder neu
kennzeichnen.
Das Verhalten einer überschreibenden Methode sollte das Liskov-Substitutionsprinzip (LSP) respektieren. Allgemeiner gesagt sollte sich das Verhalten einer überschreibenden Methode an den Vertrag der virtuellen Methode halten.
Diese Einschränkungen gelten nicht für überladene statische Methoden, die genauer als unterschiedliche Methoden mit demselben Namen, die jedoch unterschiedliche Funktionen erfüllen, konzipiert werden.
Das Schlüsselwort new
erstellt Mitglieder mit demselben Namen, aber unterschiedlichen Aktionen.
Wenn das Schlüsselwort new
verwendet wird, erscheint diese Warnung nicht wie gewöhnlich. Denken Sie außerdem daran, dass Sie nicht einmal Delegates verwenden müssen, um die versteckten Methoden der Eltern jederzeit aufzurufen; Sie müssen ihnen nur ihre vollständigen Namen geben.
Implementierung des Verbergens einer statischen Methode in C#
using System;
class Hi {
static void Main() {
C2.Calldisplay();
}
}
class C1 {
public static void display() {
System.Console.WriteLine("Class 1 it is");
}
}
class C2 : C1 {
public static void display() {
System.Console.WriteLine("Class 2 it is");
}
public static void Calldisplay() {
display();
C1.display();
}
}
Ausgang:
Class 2 it is
Class 1 it is
Die Methode display()
wird von der Klasse C1
von der Klasse C2
geerbt, die C1.display()
aufruft. Die Funktion namens C1.display()
in der C2
-Klasse, die von der C1
-Klasse geerbt wurde, ruft die verborgene statische Methode auf der übergeordneten Klasse auf, bei der es sich um die C1
-Klasse handelt.
Die Tatsache, dass statische Methoden nicht auf einer Instanz aufgerufen werden können und aufgerufen werden müssen, indem der Name des Typs angegeben wird, zu dem sie gehören, rechtfertigt es unserer Ansicht nach, sie zu verbergen. Die wichtigste Entscheidung, die bei einer Methode getroffen werden muss, ist, ob es sich um eine statische Methode, eine Instanz
-Methode oder eine virtuelle
Methode handeln soll.
Die Verwendung des Begriffs neu
hat zur Folge, dass die Polymorphie nicht aufrechterhalten werden kann. Während es helfen kann, bestimmte Verhaltensweisen neu zu interpretieren, müssen wir es mit großer Vorsicht verwenden und sehr vorsichtig sein, wie und wo wir es verwenden.
Jeder, der die Basisklasse anzeigt, während er eine neu definierte Eigenschaft aufruft, erhält die vorherige Version der Eigenschaft und nicht die aktuelle.
Es ist wichtig, sich daran zu erinnern, dass partielle Klassen nicht über Assemblys hinweg angegeben werden können, da dies eine Beschränkung ist, die von der Sprache auferlegt wird.
In einer idealen Welt sollten Sie sie verwenden, um eine umfangreiche Klasse in viele Dateien zu partitionieren (andernfalls könnten Sie etwas falsch machen). Sie können sie manchmal verwenden, um Code zu teilen, um die plattformübergreifende Entwicklung zu erleichtern (da nicht jeder Code auf jeder Plattform funktioniert).
Wenn Sie für mehrere Plattformen entwickeln, können Sie in dieser Situation möglicherweise diese Strategie anwenden. Sie sollten sich jedoch nach alternativen Möglichkeiten zur Modellierung Ihrer Klassen umsehen. Um das Ganze noch schlimmer zu machen, es ist völlig unleserlich!
Wenn partielle Klassen verwendet werden, ist es üblich, dass alle Komponenten erweitert gesucht werden. Das macht es für Neuankömmlinge nur schwieriger zu verstehen, was passiert.
Auf diese Weise können wir die Arbeit des Überschreibens einer statischen Methode einer abstrakten Basisklasse auf andere Weise abschließen.
I'm a Flutter application developer with 1 year of professional experience in the field. I've created applications for both, android and iOS using AWS and Firebase, as the backend. I've written articles relating to the theoretical and problem-solving aspects of C, C++, and C#. I'm currently enrolled in an undergraduate program for Information Technology.
LinkedIn