有人这样说(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的区别再那里,感觉不出来哪..
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的区别再那里,感觉不出来哪..
如果用
a aa=new bb()时
a.x1()输出的才是a1
virtual 、override : 虚函数,是晚绑定。将调用实际对象的类型,即 new 的类型。 a aa = new bb();
a.x1(); //输出a1
a.x2(); //输出f2
a.x3(); //输出a3,默认是覆盖
new是新生命