2011-08-31 66 views
2

从下面的代码我想知道 MyMethod2()和MyMethod3()之间有什么区别。 为什么.net提供的不提供编译错误,因为没有提到新的关键字或换句话说,为什么.net提供了新的关键字,如果两个实现都是相同的。C#中新修饰符的真正意义是什么

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 
    } 
+0

尝试使用非虚拟方法 - 这就是技巧开始的地方。 – 2011-08-31 23:06:55

+0

此处'new'的_only_效果是为了抑制隐藏警告。 –

回答

1

它不会给你一个编译错误,但它会给你一个警告,并且表现得好像你使用了新的关键字。

相关问题