ala*_*ere 0 c# inheritance object
class base_c
{
public virtual void a() {}
public virtual void b() {}
public virtual void c() {}
public virtual void d() {}
}
class other_c : base_c
{
public void a() {}
public new void b() {}
public override void c() {}
public override void d() {base.d();}
}
class Program
{
static void Main()
{
base_c game2 = new other_c();
game2.a();
game2.b();
game2.c();
game2.d();
}
}
Run Code Online (Sandbox Code Playgroud)
'd'具有所需的行为,即更一般的base_c函数以及更具体的other_c,尽管如果订单是相反的,它会很好.要查看这有效,请使用调试器并逐步执行该程序.
'd'是实现这一结果的最佳方式吗?
虽然可以在此示例中更改"base_c game2 = ...",但必须保留base_c,并且不能更改为other_c.
是的,如果你的意图是让子类扩展方法D中的继承行为,那么模式是在子的d覆盖中调用base.d().
如果您的意图是替换继承的行为(而不是extend),那么您就不会调用基本方法.
您还可以选择在覆盖方法中执行任何操作之前是先调用基本方法,还是在覆盖方法的中间或代码之后调用基本方法.
所有这些都是适当情况下的有效技术.