2024-03-29 virtual、override和new区别

virtual:虚方法,父类实现提供子类override和new。
override:重写,子类可以重写父类的virtual function,子类调用就是自己重写的函数,父类也是调用子类的重写函数。
new:新的一个,子类直接创建一个名字和父类的virtual function名字一样的方法,子类调用是自己new function ,父类调用的是自己virtual function。
子类初始化调用顺序:会先调用父类的构造函数,然后再调用子类的构造函数。

public  class A
{
    public A()
    {
        Test();
        Console.WriteLine("初始化A");
    }
    public virtual void Test()
    {
        Console.WriteLine("A.Test");
    }
}


public class B : A
{
    public B()
    {
        Test();
        Console.WriteLine("初始化B");
    }
    public override void Test()
    {
        Console.WriteLine("B.Test");
    }
}

public class C:A
{
    public C()
    {
        Test();
        Console.WriteLine("初始化C");
    }
    public new void Test()
    {
        Console.WriteLine("C.Test");
    }
}



public class Program
{
 
    static void Main(string[] args)
    {
        //override 重写 子类初始化,会初始化父类的构造函数,然后初始化子类的构造函数。
        //子类重写了父类的方法,那么调用的是子类的方法,如果没有重写父类的virtual虚方法,那子类调用的还是父类的方法
        B b = new B();
        b.Test();
        //new 隐藏父类原来的方法,调用的是子类的方法,父类调用的方法还是父类的方法,子类调用的方法是子类的方法,比如父类的构造函数调用父类的virtual function,子类的构造函数调用子类的new function。
        C c = new C();
        c.Test();
        Console.WriteLine(  "nihao");

        Console.ReadKey();

    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容