如果签名相同的方法在基类和派生类中都进行了声明,但是该方法没有分别声明为virtual和override,派生类就会隐藏基类方法(要使用new关键字进行声明)
class My
{
public void m()
{
Console.WriteLine(55);
}
}
class You:My
{
public new void m()
{
Console.WriteLine(6);
}
}
如果使用了子类声明的对象,调用隐藏方法会调用子类的。如果使用父类声明对象,那么就会调用父类中的隐藏方法
You y = new You();//调用了子类的声明对象
y.m();
My y = new You();//调用了父类的声明对象
y.m();