有人这样说(http://www.zhirui.com/it/2004/8-5/1910.html)
    new这个关键字的作用是如果在以前的版本中有这个方法,就沿用以前的方法,而不用我现在方法内容.而virtual的方法的作用正好相反,它的作用是如果在父类中有这样一个方法,则用我现在写的方法内容,让以前的滚蛋!不过,这里用new好象不太好,让人误解我测试代码using System;namespace ConsoleApplication2
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: 在此处添加代码以启动应用程序
//
a aa=new a();
bb bbb=new bb();
bbb.x1();
bbb.x2();
bbb.x3();
Console.Read();
}
} class a
{
public virtual void x1()
{
Console.Write("a1\n");
}
public virtual void x2()
{
Console.Write("a2\n");
}
public virtual void x3()
{
Console.Write("a3\n");
}
} class bb : a
{
public new void x1() //new
{
Console.Write("f1\n");
}
public override void x2() //override
{
Console.Write("f2\n");
}
public void x3()
{
Console.Write("f3\n");
}
}
}输出确是;
f1              //按照某人的说法,是不是应该输出a1
f2
f3
我觉的某人说的不该有错,是不是我的程序有问题
virtual+override 与new的区别再那里,感觉不出来哪..

解决方案 »

  1.   

    要么是某人说错了,要么是你看错了
    如果用
    a aa=new bb()时
    a.x1()输出的才是a1
      

  2.   

    new      : 覆盖的意思,是早绑定。在对象声明时即确定了对象的类型。
    virtual 、override : 虚函数,是晚绑定。将调用实际对象的类型,即 new 的类型。      a aa = new bb();     
          a.x1();  //输出a1
          a.x2();  //输出f2
          a.x3();  //输出a3,默认是覆盖
      

  3.   

    override是覆盖已经有的
    new是新生命
      

  4.   

    不管是用NEW还是用OVERRIDE,只要是子类的对象调用的都是子类的方法,而父类的对象调用的却是父类的方法,但如果是把子类的引用给父类,用NEW和OVERRIDE却不同了