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

C# 我们可以为抽象类A调用方法M1吗?,c#,C#,专家们 下面是类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;

专家们

下面是类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;
    }
}

只要
B
覆盖
M1
虚拟方法分派将使
B.M1()
被调用,即使您将
B
的实例强制转换为
A

您只能在
B
code中使用
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是一个可以重写的方法,但如果不重写,它将执行基类方法。

不,您不能这样做。好的,只是因为我们不能实例化的原因?谢谢公共类C:A{}您不能在B的其他地方也引用
base.M1()