Klasa pochodna zawiera metodę "Count", która wykonuje pewne działania na klasie "Derived". Z drugiej strony mam metodę Extension, która jest również skierowana do klasy "Derived".Dlaczego metoda rozszerzenia zachowuje się inaczej?
Derived derived = new Derived();
derived.Count();
Wywołanie powyższego fragmentu spowoduje wykonanie metody "Count" wewnątrz klasy pochodnej. Dlaczego kompilator C# nie ostrzega i nie identyfikuje metody rozszerzenia w tej sytuacji. W jaki sposób środowisko wewnętrznie to obsługuje?
//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();
}
}
Możesz również dodać szczegóły dotyczące tego, dlaczego. Przykłady Mogę wymyślić: Zmniejszenie niejednoznaczności, a więc nie kończy się na zmianie funkcjonalności klasy podstawowej (np. Przez wywołanie twojego rozszerzenia 'Count' lub' Count' instancji 'zależnie od tego, co jest w zakresie lub określone w danym momencie) – Xcelled194
Jeśli naprawdę chcesz wywołać metodę rozszerzenia zamiast normalnej, nie możesz użyć cukru syntaktycznego i musisz użyć normalnego statycznego wywołania metody: 'Derived derived = new Derived(); ExtensionMethods.Count (pochodna); ' – Alejandro