专家
下面是带有虚拟方法和覆盖的抽象类的代码。
我们可以调用A类的方法M1,因为我们无法实例化它吗?感谢,
public abstract class A
{
public virtual int M1(int a, int b)
{
return a + b;
}
}
public class B : A
{
public override int M1(int a, int b)
{
return a - b;
}
}
答案 0 :(得分:1)
只要B
覆盖M1
,虚拟方法调度就会调用B.M1()
,即使您将B
的实例投射到A
。
您可以使用B
语法在base.M1()
代码中唯一可以调用的地方:
public override int M1(int a, int b)
{
var temp = base.M1(a, b);
return temp - a - b;
}
但是,可以有另一个继承自A
的类(让它命名为C
),它不会覆盖M1
。在这种情况下,在M1
的实例上调用C
将调用A.M1()
。
答案 1 :(得分:0)
您必须实例化一个实现A1的类,virtual是您可以覆盖的方法,但如果不实现,它将执行基类方法。