C#中新修饰符的真正意义是什么?

时间:2011-08-31 23:03:18

标签: c# oop inheritance

从下面的代码我想知道 MyMethod2()和MyMethod3()之间有什么区别? 为什么.net提供的不会因为没有提到new关键字而给出编译错误,或者换句话说为什么.net提供了new关键字,如果两个实现都相同的话。

public class MyBase
{
    public virtual void MyMethod2()
    {
         //do something
    }
    public virtual void MyMethod3()
    {
        //do something
    }
}

public class MyDerived :MyBase
{
    public void MyMethod2()
    {
        base.MyMethod2();
    }
    public new void MyMethod3()
    {
        base.MyMethod3();
    } 
}


   static void Main(string[] args)
    {

        MyBase myClass = new MyDerived();
        myClass.MyMethod2(); //calls base class
        myClass.MyMethod3(); //calls base class
    }

1 个答案:

答案 0 :(得分:1)

它不会给你一个编译错误,但它会给你一个警告,并表现得就像你使用了new关键字一样。