在函数前面加了virtual和没virtual有什么区别啊?
如果在另一个类中直接覆盖父类的函数,父类函数前不加virtual且子类函数前也不加override,和父类函数前加virtual且子类函数前加override两者有什么区别啊?能否说详细点啊?
先谢谢啦!!!
namespace Oct_7_ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
MyClassBase c = new MyClass2();//定义一个 MyClassBase实例, 但调用的却是 MyClass2构造方法
c.F();
c.G();
}
}
class MyClassBase
{
public virtual void F()//虚方法
{
Console.WriteLine("F of Base");
}
public void G()
{
Console.WriteLine("G of Base");
}
}
class MyClass2 : MyClassBase
{
public override void F()//虚方法重写
{
Console.WriteLine("F or MyClass2");
}
public void G()//与基类方法同名, 编译警告!
{
Console.WriteLine("G of MyClass2");
}
}
}
你试一下运行的结果是什么, 就会知道是什么区别了.
class MyClass2 : MyClassBase
{
public override void F()//虚方法重写
{
Console.WriteLine("F or MyClass2");
}
public void G()//与基类方法同名, 编译警告!改为 public new void G()则不警告
//因为你明显告诉编译器你是有意隐藏同名函数
{
Console.WriteLine("G of MyClass2");
}
}
[此贴子已经被作者于2006-10-10 8:41:36编辑过]
还是不懂啊,大哥,能否说明白点,这样看还是看不懂啊!!!!
我还想问问:父类函数前加virtual且子类函数前加new和无加new两者有什么区别啊?