#c_sharp #ооп #наследование
Какая в C# есть возможность для принудительного вызова функции базового класса в функции наследника Пример: class A { public virtual void F(){...} } class B : A { public override void F() { base.F();//<--- должна быть эта строка! Иначе , //выкинуть ошибку, к примеру. ... } } Спасибо!
Ответы
Ответ 1
Можно сделать так: порядок вызова определяем в родителе, а наследников обязуем переопределить их часть. Если эта часть необязательная, то можно ослабить условие, и сделать метод virtual вместо abstract. class A { public void F() { // базовый код FInternal(); } protected abstract void FInternal(); // более мягкий вариант //protected virtual void FInternal() //{ //} } class B : A { protected override void FInternal() { ... } }Ответ 2
Наследованием вы не добьетесь. Сделайте из базового класса сервис, которому передавайте клиентский класс, чтобы он находился под управлением сервиса: interface IClient() { void F(); } class Service : IClient { public void Execute(IClient c) { F(); c.F(); } public void F() { ... } };
Комментариев нет:
Отправить комментарий