Есть риск запутаться. Простым решением этой проблемы является композиция классов, как показано ниже:
public class A
{
public void GetData()
{
Console.WriteLine("Data coming from A");
}
}
// Here we use composition over inheritance.
public class B
{
A _a;
public B()
{
_a = new A();
}
public virtual void GetData()
{
_a.GetData();
Console.WriteLine("Data coming from B");
}
}
public class C : B
{
public override void GetData()
{
base.GetData();
Console.WriteLine("Data coming from C");
}
}
Теперь, если вы используете вот так, вы можете использовать следующий код:
var c = new C();
c.GetData();
, который производит вывод:
Data coming from A
Data coming from B
Data coming from C
Дальнейшее примечание : вы можете легко применить композицию к классам B
и C
, так же, как я делал для A
и B
.