c#继承一般然后具体

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.

dth*_*rpe 6

是的,如果你的意图是让子类扩展方法D中的继承行为,那么模式是在子的d覆盖中调用base.d().

如果您的意图是替换继承的行为(而不是extend),那么您就不会调用基本方法.

您还可以选择在覆盖方法中执行任何操作之前是先调用基本方法,还是在覆盖方法的中间或代码之后调用基本方法.

所有这些都是适当情况下的有效技术.