Mam następujący wzór modelu:Czy istnieje sposób przeciążania metod rozszerzeń w C#?
public abstract class PARENTCLASS {...}
public class CHILD_A_CLASS : PARENTCLASS{...}
public static class EXTENSION{
public static METHOD(this PARENTCLASS parent){...}
public static METHOD(this CHILD_A_CLASS child) {...}
}
Coś jak powyżej, oczywiście będzie więcej dziecko (i wnuk) klas, ale ja po prostu umieścić jeden z nich. Problemem jest to, kiedy nazywa się metodę rozszerzenia tak:
PARENTCLASS cc = new CHILD_A_CLASS();
cc.METHOD();
To będzie wykonywał rodzic metodę rozszerzenia zamiast moja oczekiwano metodę rozszerzenia dziecka. Ktoś ma pomysł, jak to wdrożyć? (Nie zastanawiam się nad wprowadzeniem METHOD do klasy i pozwolić mu na dziedziczenie, ponieważ chcę zachować czystość klasy modelu i odejść od innej logiki).
Dzięki. Myślę, że odlewanie typu byłoby zbyt kosztowne do wykonania, a także dość niezdarne, aby utrzymać kod w ten sposób. Myślę, że szukałbym alternatywnej metody wdrożenia tego. – xandy
Odlewanie typów jest dość szybkie, choć może być trudne do utrzymania. –
Twoja propozycja nie jest polimorficzna, wybrana metoda jest poprawna tylko dla typu odwołania do kompilacji, a nie dla typu środowiska wykonawczego. Mówiąc krótko, nie jest to prawda nadrzędna - uważam, że jest to zła praktyka, ponieważ nie będzie działać przez cały czas i tylko doprowadzi do niespójności, będzie wyglądała źle i spowoduje więcej problemów. Myślę, że metody rozszerzenia są złe, ponieważ ukrywają fakt, że te metody nie są dynamicznie wywoływane. –