我了解到虚拟方法的使用为方法/函数提供了默认行为。我的疑问是,当我们可以在派生类中使用“new”实现同名的方法(如在基类中)并且可以由对象分别调用它时,那么虚拟方法的用途是什么。例如;
class A
{
public void F()
{
//default behavior
}
public virtual void G()
{
//default behavior
}
}
class B:A
{
new public void F()
{
//new behavior from that of class A
}
public override void G()
{
//new behavior from that of class A
}
}
class Test
{
public static void Main(string[] args)
{
//For calling A's method use same compile time and run time object
A obj1 = new A();
//For calling B's method use compile time object of A and run time of B
A obj2 = new B();
obj1.F(); //O/P is A's method result
obj2.F(); //O/P is A's method result
obj1.G(); //O/P is A's method result
obj2.G(); //O/P is B's method result
}
我的问题是,当我们可以通过使用 A 类和 B 类的相同编译时对象和运行时对象来提供默认行为和派生行为时,为什么需要类 A 中的虚拟 G(),如下所示:
A obj1 = new A(); //for calling A's methods
B obj2 = new B(); //for calling B's methods
A obj3 = new B(); //for having default behavior of class A using B's run time object.
我得到的只是在虚拟的情况下,我们不需要再制作一个具有相同编译和运行时类型的对象。它可以通过一个对象来实现,即类型 A 的编译时间和类型 B 的运行时间。