Вызов функции при вызове иной фунции
Есть код:
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();
//код дополняющий метод
}
}