zoukankan      html  css  js  c++  java
  • C# virtual override 和 new 的区别

    一直以来我都对 virtual  override 和 new 之间的区别感到疑惑不解。

    特别笔试的时候特别容易考到,真的很容易弄错啊,畜生!

    光看理论永远记不住,那不如写几行代码就懂了。

    首先看看virtual  override实现什么效果:

    class A
    {
        public virtual void say() 
        {
            Console.WriteLine("A");
        }
    }
    
    class B :A
    {
        public override void say() 
        {
            Console.WriteLine("B");
        }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            A a = new A();
            a.say();
            A b = new B();
            b.say();
            B c = new B();
            a = c;
            c.say();
            a.say();
            Console.ReadLine();
        }
    }

    结果是:

    A

    B

    B

    B

    可以看到只要创建的对象是B型,那么都会调用B型的say()。

    再看看new修饰符的效果:

    class A
    {
        public void say() 
        {
            Console.WriteLine("A");
        }
    }
    
    class B :A
    {
        public new void say() 
        {
            Console.WriteLine("B");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            A a = new A();
            a.say();
            A b = new B();
            b.say();
            B c = new B();
            a = c;
            c.say();
            a.say();
            Console.ReadLine();
        }
    }

    结果是:

    A

    A

    B

    A

    也就是说,只要声明的时候是A型,那么不管最后赋予的对象是不是B型,都会调用A型的say()。

  • 相关阅读:
    [华为机试] 计算二进制数中1的个数
    vector释放
    opencv findcontours内存错误
    opencv的编译安装
    opencv SVM分类器模块的简单设计
    centos7.6安装FFMpeg
    centos安装jenkins
    centos 7.6安装Java
    Centos7 忘记密码的情况下,修改root或其他用户密码
    性能测试报告
  • 原文地址:https://www.cnblogs.com/nonkicat/p/3634757.html
Copyright © 2011-2022 走看看