Страницы

Поиск по вопросам

воскресенье, 8 декабря 2019 г.

Принудительный вызов base C#

#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() { ... } };

Комментариев нет:

Отправить комментарий