我们可以为抽象类A调用方法M1吗

本文关键字:调用 方法 M1 抽象类 我们 | 更新日期: 2023-09-27 18:03:41

专家

下面是B类中具有虚拟方法和覆盖的抽象类的代码。

我们可以调用类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;
    }
}

我们可以为抽象类A调用方法M1吗

一旦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。在这种情况下,在C的实例上调用M1将调用A.M1()

必须实例化一个实现A1的类,virtual是一个可以重写的方法,但如果不重写,它将执行基类方法。