我们可以将方法M1称为抽象类A吗?

时间:2014-05-17 03:03:30

标签: c#

专家

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

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

2 个答案:

答案 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是您可以覆盖的方法,但如果不实现,它将执行基类方法。