zoukankan      html  css  js  c++  java
  • 【转】override和new的区别?

    先看下面这段代码的输出:

        class ClassA
        { 
            public virtual void WriteString()
            {
                Console.WriteLine("ClassA类virtual WriteString");
            }

            public void Write()
            {
                Console.WriteLine("ClassA类void Write");
            }
        }
        class ClassB : ClassA
        {
            public override void WriteString()
            {
                Console.WriteLine("ClassB类override void WriteString");
            }

            public new  void Write()
            {
                Console.WriteLine("ClassB类new  void Write");
            }
        }

        class WatinConsoleExample
        {
            [STAThread]
            static void Main(string[] args)
            {
                ClassB b = new ClassB();
                ClassA a = (ClassA)b; //转换为其类
                a.WriteString(); //ClassB中用override实现,输出为:   ClassB类override void WriteString
                a.Write();  // ClassB中用new实现,输出为:   ClassA类void Write
                Console.ReadLine();
            }
        }


    上面这段代码的输出结果为:
    ClassB类override void WriteString
    ClassA类void Write

    由此得出结论:
    1.派生类中用new实现基类的同名方法,把派生类强制转换为基类型时,将调用基类中的实现;
    2.相反,派生类中用override 实现基类的virtual 同名方法,把派生类强制转换为基类型时,仍将调用派生类自己的实现。

     

    转自star163的博客,原文地址http://www.cnblogs.com/finejob/articles/970957.html

  • 相关阅读:
    chrome浏览器(block)屏蔽http文件下载,如何解除?
    node项目无法编译
    Google的60款开源项目
    王兴:真正的高手,都在苦练基本功
    Flink SQL 写 hudi
    Python3 bytes函数
    Python中Base64编码与解码
    Python 类的__setitem__(),__getitem()__,__delitem__()方法
    Python queue(队列)
    Ubuntu20.04设置远程桌面连接
  • 原文地址:https://www.cnblogs.com/xiaoyusmile/p/2553704.html
Copyright © 2011-2022 走看看