Freigeben über


Das Basisschlüsselwort

Das base Schlüsselwort wird verwendet, um von einer abgeleiteten Klasse aus auf Member der Basisklasse zuzugreifen. Verwenden Sie es, wenn Sie Folgendes ausführen möchten:

  • Rufen Sie eine Methode der Basisklasse auf, die von einer anderen Methode überschrieben wurde.
  • Geben Sie an, welcher Basisklassenkonstruktor beim Erstellen von Instanzen der abgeleiteten Klasse aufgerufen werden soll.

Der Zugriff auf eine Basisklasse ist nur in einem Konstruktor, einer Instanzenmethode und einem Instanzeneigenschaften-Accessor zulässig. Die Verwendung des Schlüsselworts base aus einer statischen Methode erzeugt einen Fehler.

Die Basisklasse, auf die zugegriffen wird, ist die in der Klassendeklaration angegebene Basisklasse. Wenn Sie z.B. class ClassB : ClassA angeben, wird von ClassB auf die Member von ClassA unabhängig von der Basisklasse von ClassA zugegriffen.

In diesem Beispiel haben sowohl die Basisklasse Person als auch die abgeleitete Klasse Employee eine Methode namens GetInfo. Mithilfe des base Schlüsselworts ist es möglich, die GetInfo Methode der Basisklasse aus der abgeleiteten Klasse aufzurufen.

public class Person
{
    protected string ssn = "444-55-6666";
    protected string name = "John L. Malgraine";

    public virtual void GetInfo()
    {
        Console.WriteLine($"Name: {name}");
        Console.WriteLine($"SSN: {ssn}");
    }
}
class Employee : Person
{
    public readonly string id = "ABC567EFG";
    public override void GetInfo()
    {
        // Calling the base class GetInfo method:
        base.GetInfo();
        Console.WriteLine($"Employee ID: {id}");
    }
}

class TestClass
{
    static void Main()
    {
        Employee E = new Employee();
        E.GetInfo();
    }
}
/*
Output
Name: John L. Malgraine
SSN: 444-55-6666
Employee ID: ABC567EFG
*/

In diesem Beispiel wird gezeigt, wie Sie den Beim Erstellen von Instanzen einer abgeleiteten Klasse aufgerufenen Basisklassenkonstruktor angeben.

public class BaseClass
{
    private int num;

    public BaseClass() => 
        Console.WriteLine("in BaseClass()");

    public BaseClass(int i)
    {
        num = i;
        Console.WriteLine("in BaseClass(int i)");
    }

    public int GetNum() => num;
}

public class DerivedClass : BaseClass
{
    // This constructor will call BaseClass.BaseClass()
    public DerivedClass() : base() { }

    // This constructor will call BaseClass.BaseClass(int i)
    public DerivedClass(int i) : base(i) { }

    static void Main()
    {
        DerivedClass md = new DerivedClass();
        DerivedClass md1 = new DerivedClass(1);
    }
}
/*
Output:
in BaseClass()
in BaseClass(int i)
*/

Weitere Beispiele finden Sie unter "Neu", "Virtuell" und "Außerkraftsetzen".

C#-Sprachspezifikation

Weitere Informationen erhalten Sie unter C#-Sprachspezifikation. Die Sprachspezifikation ist die endgültige Quelle für C#-Syntax und -Verwendung.

Siehe auch