繁体   English   中英

C#继承一般然后特定

[英]c# inheritance general then specific

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出现,但是如果顺序相反则会很好。 若要查看此效果,请使用调试器并逐步执行该程序。

“ d”是实现此结果的最佳方法吗?

尽管在此示例中可以更改它,但“ base_c game2 = ...”必须保留为base_c,并且不能更改为other_c。

是的,如果您的意图是让子类扩展方法D中的继承行为,则模式是在子项d的替代中调用base.d()。

如果您打算替换继承的行为(而不是扩展),则不会调用基本方法。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM