я следующая ситуация:Как вызвать (не фактически) первоначальную реализацию виртуального метода?
В 3-сторонней библиотеки (не может быть изменен):
class A { public virtual void M() {} }
class B : A { public override void M() {} }
В моем собственном коде:
class C : B { public override void M() {} }
От реализации C
«s метода M
Я хочу позвонить A
(но не B
!). Могу я?
Любые трюки принимаются, отражение включены. Я уже пробовал отразить, но используя MethodInfo
, который я получаю от typeof(A)
, по-прежнему генерирует виртуальный вызов (вызов C
с последующим переполнением стека).
Получение C
от A
не может быть и речи из-за сложности переопределения B
.
Это одна из причин, почему я почти никогда не используют наследование. – ChaosPandion
@ChaosPandion: Да! Полностью! Подумайте об этом, зачем вообще писать код вообще? – Timwi
@ Тимви - Я знаю, что ты просто шутишь, но есть лучшие способы, такие как композиция. – ChaosPandion