问题
class A
{
    public virtual void run()
    {
         System.console.writeline("A");
    }
}
class B:A
{
    public override void run()
    {
         System.console.writeline("B");
    }
}
class C:B
{
    public new void run()
    {
         System.console.writeline("C");
    }
}
public class test
{
    public static void Main()
    {
         A a=new C();
         C c=new C();
         a.run();
         a.run();
    }
}
求解释,运行过程及结果为什么不一样C#

解决方案 »

  1.   

    我这里严禁写new。这是严重破坏面向对象编程的语法,写这种代码的人必须离开团队。我不知道你从哪里看到这个代码。但是要说明的就是,假设作者明知道run是原先在父类有定义的,为什么偏要故意写一个重名的但是毫无关系的run方法呢?作者写成run2方法不好么?所以这个new是一锅粥里故意地放上一个死耗子,诚心要恶心死人的代码。c#中有极少数从c++继承来的垃圾代码,这个new就是一个。
      

  2.   

    你自己查一下new关键字的作用就知道了。这是一个作者,明知道接口或者父类已经定义了这个协议,偏要弄一个重名的但是毫无关系的东西,于是c#规定你必须写上new关键字作为标志。这样,c#就会在c.run()中调用这个毒瘤,而不会调用接口协议规范的那个run()方法。
      

  3.   

    其实就看一点,你解不解释的通?
    c里面的run方法和接口或是基类中的run没有任何继承关系。为什么要叫run?