重写和隐藏的定义:
重写:基类方法声明为virtual(虚方法),派生类中使用override申明此方法的重写.
隐藏:基类方法不做申明(默认为非虚方法),在派生类中使用new声明此方法的隐藏。
这样看起来似乎不是很清晰明了,换成我自己的理解就是:
比如父类A,有个方法标记为virtual,a(){}
子类B继承A,也声明一个方法a(){}
如果B里面的a()使用override,那么访问A的方法时实际上调用了B里面声明的方法,相当于A的方法被覆盖了,new就不是,访问A的a还是A里面定义的方法,访问B就是B里面定义的方法.
子类B继承A,也声明一个方法a(){}
如果B里面的a()使用override,那么访问A的方法时实际上调用了B里面声明的方法,相当于A的方法被覆盖了,new就不是,访问A的a还是A里面定义的方法,访问B就是B里面定义的方法.
说白了:new是覆盖,override是重载,“覆盖”并不意味着“删除”,但“重载”意味着“删除”,这就是“覆盖”和“重载”的区别
隐藏(new)示例:
using
System;
class
A
{
public
void
F()
{
Console.WriteLine("A.F");
}
}
class
B:
A
{
new
public
void
F()
{
Console.WriteLine("B.F");
}
}
class
Test
{
static void Main(string[] args)
{
B
b
=
new
B();
b.F();
A
a