Вызов функции при вызове иной фунции

Есть код:

public interface IMain
{
    public void Any (); 
}
public class Extra
{
    public void Extra ()
    {
        //code
    }
}
public class Child : IMain
{
    void Any ()
    {

    }
}

Можно ли сделать так, чтобы после вызова Any в классе Child вызывался метод Extra? При этом, чтобы это работало на все классы которые наследуются от IMain и это не нужно было менять в каждом дочернем объекте.


Ответы (2 шт):

Автор решения: Andrei Khotko

Можно. Нужно лишь получить объект класса Extra внутри метода Any:

public class Child : IMain
{
    void Any()
    {
        var extraObj = new Extra();
        extraObj.Extra();
    }
}

Либо создать поле типа Extra в классе Child:

public class Child : IMain
{
    private Extra _extraObj = new Extra();
    
    void Any()
    {
        _extraObj.Extra();
    }
}
→ Ссылка
Автор решения: Pavel Popov

Вот вариант через интерфейс, только для версии C# 8.0

public interface  IMain
{
    public virtual void Any()
    {
        new Extra().ExtraCall();
    }
}
public class Extra
{
    public void ExtraCall()
    {
        //code
    }
}
public class Child : IMain
{
}

Но, я вижу это немного по другому, через базовый класс. В дочерних классах вы можете переопределить базовый метод и если нужно внутри вызвать его же.

public class Main
    {
        public virtual void Any()
        {
            new Extra().ExtraCall();
        }
    }
    public class Extra
    {
        public void ExtraCall()
        {
            //code
        }
    }
    public class Child: Main
    {
        public override void Any()
        {
            base.Any();

            //код дополняющий метод
        }
    }
→ Ссылка