public class Base
{
public void abc()
{
Console.WriteLine("In base");
}
} public class Driver : Base
{
public new void abc()
{
Console.WriteLine("In driver");
}
}
上面两个类,
Base f = new Base();
f.abc();
Base f2 = new Driver();
f2.abc();
Driver f1 = new Driver();
f1.abc();
Console.ReadKey(true);
输出结果是 In base
In base
In driver第二个 结果是 In base 不是太明白 为啥不是In driver
{
public void abc()
{
Console.WriteLine("In base");
}
} public class Driver : Base
{
public new void abc()
{
Console.WriteLine("In driver");
}
}
上面两个类,
Base f = new Base();
f.abc();
Base f2 = new Driver();
f2.abc();
Driver f1 = new Driver();
f1.abc();
Console.ReadKey(true);
输出结果是 In base
In base
In driver第二个 结果是 In base 不是太明白 为啥不是In driver
{
public new void abc()
{
Console.WriteLine("In driver");
}
} new 改成 override后 输出的是 In driver
new就是派生类自己完全独立的方法,无视(隐藏)基类的方法
abc不是一个虚方法,你把子类Up Cast成基类去调用abc,当然输出时In base
当父类的abc加上virtual关键字,子类abc new改成override,这就是一个虚方法了,输出就是In driver楼主对于多态的理解和virtual/override/new这些关键字的理解需要加强