有人这样说(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的区别再那里,感觉不出来哪..
解决方案 »
- 请教winform的问题,关于AcceptButton
- C# 跨线程可访问控件吗?F5调试与Ctrl+F5执行(不调试)的区别?
- ASP.NET 分裂自负串
- 急急,高手求助,如何判断一个xml文件打开
- 100分全压上,求用C#开发的winform源码,支持网络的。本人用以学习之用。感谢感谢
- 如何获取服务器windows操作系统物理路径?VC#
- 如何在winform表单中接受键盘输入,即如何启动Form1_KeyPress事件
- System.Io文件路径问题?
- 救命啊,丢失的keyup事件。。
- 一个关于数据传输的问题。
- DataGrid列名修改问题?
- web server 配置的问题。。。。。。。。。
如果用
a aa=new bb()时
a.x1()输出的才是a1
virtual 、override : 虚函数,是晚绑定。将调用实际对象的类型,即 new 的类型。 a aa = new bb();
a.x1(); //输出a1
a.x2(); //输出f2
a.x3(); //输出a3,默认是覆盖
new是新生命