Dela via


Grundnyckelordet

Nyckelordet base används för att komma åt medlemmar i basklassen inifrån en härledd klass. Använd den om du vill:

  • Anropa en metod i basklassen som åsidosätts av en annan metod.
  • Ange vilken basklasskonstruktor som ska anropas när du skapar instanser av den härledda klassen.

Basklassåtkomst tillåts endast i en konstruktor, i en instansmetod och i en instansegenskapsaccessor. Om du använder nyckelordet base inifrån en statisk metod genereras ett fel.

Basklassen som används är basklassen som anges i klassdeklarationen. Om du till exempel anger class ClassB : ClassAkommer medlemmarna i ClassA åt från ClassB, oavsett vad basklassen för ClassA är.

I det här exemplet har både basklassen Person och den härledda klassen Employee en metod med namnet GetInfo. Med hjälp av nyckelordet base är det möjligt att anropa GetInfo metoden för basklassen inifrån den härledda klassen.

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
*/

Det här exemplet visar hur du anger den basklasskonstruktor som anropas när du skapar instanser av en härledd klass.

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)
*/

Fler exempel finns i nytt, virtuellt och åsidosättning.

Språkspecifikation för C#

Mer information finns i C#-språkspecifikationen. Språkspecifikationen är den slutgiltiga källan för C#-syntax och -användning.

Se även