美文网首页
c# new与override

c# new与override

作者: 独步江雪 | 来源:发表于2020-12-08 12:29 被阅读0次

override关键字表示重写(覆盖),对于加上override关键字的属性或函数将完全覆盖基类的同名虚属性或虚函数,使基类的虚属性和虚函数在整个继承链中都不可见(在子类中用base关键字调用除外)。

new表示隐藏,是指加上new关键字的属性或函数将对本类和继承类隐藏基类的同名属性或函数,但是,通过一定的转换,是可以在子类的对象中访问父类同名属性或函数的。(实践中基本上用不到这个)

 class Parent
    {
        public virtual void Func1()
        {
            Console.WriteLine("父类的虚函数Func1");
        }
        public virtual void Func2()
        {
            Console.WriteLine("父类的虚函数Func2");
        }
        public virtual void Func3()
        {
            Console.WriteLine("父类的虚函数Func3");
        }
    }
    class Sun : Parent
    {
        public override void Func1()
        {
            Console.WriteLine("子类的实现函数Func1");
        }
        public new void Func2()
        {
            Console.WriteLine("子类的实现函数Func2");
        }
        public override void Func3()
        {
            base.Func3();
        }
    }
    class Program
    {
        public static void Main(string[] args)
        {
            Parent b1 = new Sun();
            b1.Func1();  //子类覆盖了父类的方法,调用子类的方法,是多态的体现
            b1.Func2();  //子类用new隐藏父类的方法,调用隐藏的父类方法
            b1.Func3();  //子类base关键字调用,父(基)类虚方法得到调用
            Sun b2 = new Sun();
            ((Parent)b2).Func1();//子类覆盖了父类的方法,调用子类的方法,是多态的体现
            ((Parent)b2).Func2();//子类用new隐藏父类的方法,调用隐藏的父类方法
            ((Parent)b2).Func3();//子类base关键字调用,父(基)类虚方法得到调用
            Console.ReadLine();
        }
    }
image

Func1方法:由于Sun类中Func1覆盖(override)了父类Func1方法,因此即使转成父类的对象,仍旧调用子类的Func1方法。
Func2方法:由于子类Sun的Func2方法只是(new)隐藏了父类的Func2方法,因此当强制转换成父类(Base)的对象去调用Func2方法时,就会调用了被隐藏的父类的Func2方法。
Func3方法:子类虽然(override)了父类Func3方法,但是用base关键字调用,父(基)类虚方法就得到调用。

相关文章

  • c# new与override

    override关键字表示重写(覆盖),对于加上override关键字的属性或函数将完全覆盖基类的同名虚属性或虚函...

  • 2秒后跳转

    new Thread(new Runnable(){ @Override public v...

  • c#中virtual、override、new的区别

    Virtual 用于父类中,声明某方法可以重写,该方法不能是static; override(覆盖继承) 用于子类...

  • C#中new和override的区别

    先看如下实例代码: 输出结果: override即覆盖重写的意思,指子类继承父类后,重写并覆盖了父类的某个方法,子...

  • Android最省事倒计时

    第一种: new Handler().postDelayed(new Runnable() {@Override ...

  • 我所理解的多线程

    我所理解的多线程。 new Thread(new Runnable() { @Override public ...

  • 处理耗时任务的三种方法

    第一种:Thread new Thread(new Runnable() { @Override public...

  • C#中的override和new的区别

    之前做项目很少用到虚方法,并且自己还一直存在一个误解:虚方法只能放在抽象类中。其实虚方法和抽象类没有必然的关...

  • XML解析

    new Thread(){ @Override public void run() { AssetManage...

  • 网络连接

    到底 new AsyncTask (){ @Override protected String doInB...

网友评论

      本文标题:c# new与override

      本文链接:https://www.haomeiwen.com/subject/xamfgktx.html