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()。

  • 相关阅读:
    hashCode花式卖萌
    2017年的小总结
    多线程环境下的单例模式
    Servlet过滤器简单探索
    最长回文子序列(LPS)
    最短编辑距离问题
    赫夫曼编码
    DNA序列对齐问题
    同时寻找序列的最大最小值
    最长公共子序列(LCS)
  • 原文地址:https://www.cnblogs.com/nonkicat/p/3634757.html
Copyright © 2011-2022 走看看