override与new的区别
昨天参加面试,遇到一个关于new修饰符的题,由于本人不慎,给搞错了,纠其原因,还是因为我的C#基础知识不牢固,关于override与new的区别平时没有太注意。在此,为大家分享一下:
代码如下:
 public class baseClass
 public class baseClass
 {
    {
 public baseClass()
        public baseClass()
 {
        {
 Method1();
            Method1();
 }
        }
 public virtual void Method1()
        public virtual void Method1()
 {
        {
 Console.WriteLine("Method1 in baseClass");
            Console.WriteLine("Method1 in baseClass");
 }
        }
 }
    }

 public class derivedClass : baseClass
    public class derivedClass : baseClass
 {
    {
 private int value;
        private int value;
 public derivedClass()
        public derivedClass()
 {
        {
 value = 2;
            value = 2;
 }
        }
 public override void Method1()
        public override void Method1()
 {
        {
 if (value == 2)
            if (value == 2)
 Console.WriteLine("value==2");
                Console.WriteLine("value==2");
 else
            else
 Console.WriteLine("value!=2");
                Console.WriteLine("value!=2");           
 }
        }
 }
    }
代码如下:
 public class baseClass
 public class baseClass {
    { public baseClass()
        public baseClass() {
        { Method1();
            Method1(); }
        } public virtual void Method1()
        public virtual void Method1() {
        { Console.WriteLine("Method1 in baseClass");
            Console.WriteLine("Method1 in baseClass"); }
        } }
    }
 public class derivedClass : baseClass
    public class derivedClass : baseClass {
    { private int value;
        private int value; public derivedClass()
        public derivedClass() {
        { value = 2;
            value = 2; }
        } public override void Method1()
        public override void Method1() {
        { if (value == 2)
            if (value == 2) Console.WriteLine("value==2");
                Console.WriteLine("value==2"); else
            else Console.WriteLine("value!=2");
                Console.WriteLine("value!=2");            }
        } }
    }
问题:
1、初始化一实例:baseClass tempClass=new derivedClass()之后,会输出什么结果?
2、把derivedClass类中的override换成 new之后,又会输出什么结果?
正确答案:
1、value!=2
2、Method1 in baseClass
MSDN上说:new 关键字在用作修饰符时,可以显式隐藏从基类继承的成员。隐藏继承的成员意味着该成员的派生版本将替换基类版本。也就是说,在用new关键字时,派生类与基类的这两个相同签名的方法已经没有任何联系了。
而用override时,它与new的区别主要是,overrid是重写了基类的方法,new是隐藏、覆盖了基类的方法。。
 
                    
                 
    
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号