C# Language base


Esempio

La parola chiave di base viene utilizzata per accedere ai membri da una classe base. Viene comunemente utilizzato per chiamare le implementazioni di base dei metodi virtuali o per specificare quale costruttore di base deve essere chiamato.

Scegliere un costruttore

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

public class SomeBaseClass {
    public SomeBaseClass()
    {
        // new Child() will not call this constructor, as it does not have a parameter
    }
    public SomeBaseClass(string message)
    {
        // new Child() will use this base constructor because of the specified parameter in Child's constructor
        Console.WriteLine(message);
    }
}

Chiamare l'implementazione di base del metodo virtuale

public override void SomeVirtualMethod() {
    // Do something, then call base implementation
    base.SomeVirtualMethod();
}

È possibile utilizzare la parola chiave di base per chiamare un'implementazione di base da qualsiasi metodo. Ciò lega la chiamata del metodo direttamente all'implementazione di base, il che significa che anche se le nuove classi secondarie sostituiscono un metodo virtuale, l'implementazione di base verrà comunque chiamata, quindi è necessario utilizzarla con cautela.

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());

        // Notice that the call to NormalMethod below still returns the value
        // from the extreme base class even though the method has been overridden
        // in the child class.
        Assert.AreEqual(1, NormalMethod());
    }
}