c#继承一般然后具体

时间:2011-11-11 19:05:06

标签: 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();
    }
}

'd'具有所需的行为,即更一般的base_c函数以及更具体的other_c,尽管如果订单是相反的方式会很好。要查看这有效,请使用调试器并逐步执行该程序。

这是实现这一结果的最佳途径吗?

虽然在此示例中可以更改“base_c game2 = ...”必须保留为base_c且无法更改为other_c。

1 个答案:

答案 0 :(得分:6)

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

如果你的意图是替换继承的行为(不是扩展),那么你就不会调用基本方法。

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

在适当的情况下,所有这些都是有效的技术。