Abgeleitete Klasse enthält eine "Count" -Methode, die einige Aktionen für die Klasse "Derived" durchführt. Andererseits habe ich eine Erweiterungsmethode, die auch auf die Klasse "Derived" abzielt.Warum Extension-Methode verhält sich anders?
Derived derived = new Derived();
derived.Count();
Durch den Aufruf von oben Snippet wird "Count" -Methode innerhalb der abgeleiteten Klasse ausführen. Warum C# -Compiler nicht warnt und identifiziert die Erweiterungsmethode in dieser Situation. Wie funktioniert das Framework intern?
//Base class
public class Base
{
public virtual string Count()
{
return string.Empty;
}
}
//Derived class
public class Derived : Base
{
public override string Count()
{
return base.Count();
}
}
//Extension Methods for Derived class
public static class ExtensionMethods
{
public static Derived Count(this Derived value)
{
return new Derived();
}
}
Sie können auch Details darüber hinzufügen, warum. Beispiele, die ich mir vorstellen kann: Reduzieren von Mehrdeutigkeiten, und so ändern Sie nicht die Funktionalität der Kernklasse (dh, indem Sie die Erweiterung "Count" oder die Zählung der Instanz aufrufen, je nachdem, was im Bereich oder zu der Zeit angegeben ist) – Xcelled194
If Sie möchten wirklich die Erweiterungsmethode anstelle der normalen Methode aufrufen, Sie können den syntaktischen Zucker nicht verwenden und müssen den normalen statischen Methodenaufruf verwenden: 'Derived derived = new Derived(); ExtensionMethods.Count (abgeleitet); ' – Alejandro