override和new的区别 返回

C#论坛 老数据
1690

override

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

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

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

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

    public class Base
    {
        public virtual void DoIt()
        {
        }
    }
    public class Derived : Base
    {
        public override void DoIt()
        {

        }
    }

Base b = new Derived();
b.DoIt();   // 执行 Derived.DoIt


new

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

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

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

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

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

    public class Base
    {
        public virtual void DoIt()
        {
        }
    }
    public class Derived : Base
    {
        public new void DoIt()
        {
        }
    }}

Base b = new Derived();
b.DoIt();             // 执行 Base.DoIt



上面2个代码获得的结果完全不一样,可以慢慢研究一下

热忱回答0