码迷,mamicode.com
首页 > 其他好文 > 详细

override和new的区别【摘】

时间:2014-07-26 14:28:00      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   使用   os   strong   2014   

 

override

1. override是派生类用来重写基类中方法的;

2. override不能重写非虚方法和静态方法;

3. override只能重写用virtual、abstract、override修饰的方法;

4. 不能使用修饰符 new、static、virtual 或 abstract 来修改 override 方法。

new

1. new是派生类用来隐藏基类中的方法的;也就是说在派生类中“看不到”基类中的方法;

2. 如果要在派生类中隐藏(不是重写)基类中的方法,而没有使用new关键字,编译时会出现一个警告,提示如果是要隐藏基类中的方法,请使用new关键字;

3. 派生类可以隐藏基类中的虚方法,也可以隐藏基类中的普通方法。

4. 如果在派生类中用private来修饰new 方法,那么只在该派生类中隐藏了基类中的方法,在该派生类之外,相当于没有隐藏基类中的方法;

5. 如果在派生类中隐藏了基类中的方法,在该派生类的派生类中,将延续对该派生类对基类方法的隐藏。

 

代码示例

bubuko.com,布布扣
namespace Test
{
    public class A
    {
        public virtual void Myvirtual()
        {
            Console.WriteLine(DateTime.Now);
        }

        public virtual void New_Myvirtual()
        {
            Console.WriteLine(DateTime.Now);
        }
    }

    class B : A
    {
        public new void Myvirtual()
        {
            Console.WriteLine("The Time Is:" + DateTime.Now);
        }

        public override void New_Myvirtual()
        {
            Console.WriteLine("NEW_The Time Is:" + DateTime.Now);
        }
    }

    class Test
    {
        public static void Main()
        {
            B b = new B();
            b.Myvirtual();
            b.New_Myvirtual();

            Console.WriteLine();

            A c = (A)b;
            c.Myvirtual();     //调用基类的方法
            c.New_Myvirtual();//调用b的实例方法
        }
    }
}

//输出结果
//The Time Is:2014/7/26 10:58:39
//NEW_The Time Is:2014/7/26 10:58:39

//2014/7/26 10:58:39
//NEW_The Time Is:2014/7/26 10:58:39
View Code

 

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

 

摘自 小鱼1982 ,星辉

override和new的区别【摘】,布布扣,bubuko.com

override和new的区别【摘】

标签:style   blog   http   color   使用   os   strong   2014   

原文地址:http://www.cnblogs.com/wipphj/p/3869774.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!