C#基础

示例

所述base关键字被从基类用于访问成员。它通常用于调用虚拟方法的基本实现,或指定应调用哪个基本构造函数。

选择一个构造函数

public class Child : SomeBaseClass {
    public Child() : base("some string for the base class")
    {
    }
}

public class SomeBaseClass {
    public SomeBaseClass()
    {
        // new Child()将不会调用此构造函数,因为它没有参数
    }
    public SomeBaseClass(string message)
    {
        // 由于Child构造函数中指定了参数,因此new Child()将使用此基本构造函数
        Console.WriteLine(message);
    }
}

虚方法的调用基础实现

public override void SomeVirtualMethod() {
    // 做某事,然后调用基础实现
    base.SomeVirtualMethod();
}

可以使用base关键字从任何方法调用基本实现。这将方法调用直接与基本实现联系在一起,这意味着,即使新的子类覆盖了虚拟方法,仍将调用基本实现,因此在使用时必须谨慎。

public class Parent
{
    public virtual int VirtualMethod()
    {
        return 1;
    }
}

public class Child : Parent
{
    public override int VirtualMethod() {
        return 11;
    }

    public int NormalMethod()
    {
        return base.VirtualMethod();
    }

    public void CallMethods()
    {
        Assert.AreEqual(11, VirtualMethod());

        Assert.AreEqual(1, NormalMethod());
        Assert.AreEqual(1, base.VirtualMethod());
    }
}

public class GrandChild : Child
{
    public override int VirtualMethod()
    {
        return 21;
    }

    public void CallAgain()
    {
        Assert.AreEqual(21, VirtualMethod());
        Assert.AreEqual(11, base.VirtualMethod());

        // 请注意,下面对NormalMethod的调用仍返回该值
        // 即使该方法已被覆盖,也可以从极端基类中获取
        // 在儿童班。
        Assert.AreEqual(1, NormalMethod());
    }
}