Dela via


klass (C#-referens)

Klasser deklareras med nyckelordet class, enligt följande exempel:

class TestClass
{
    // Methods, properties, fields, events, delegates
    // and nested classes go here.
}

Kommentarer

Endast enstaka arv tillåts i C#. Med andra ord kan en klass ärva implementering endast från en basklass. En klass kan dock implementera mer än ett gränssnitt. I följande tabell visas exempel på implementering av klassarv och gränssnitt:

Arv Exempel
Ingen class ClassA { }
Enstaka class DerivedClass : BaseClass { }
Ingen, implementerar två gränssnitt class ImplClass : IFace1, IFace2 { }
Enkel, implementerar ett gränssnitt class ImplDerivedClass : BaseClass, IFace1 { }

Klasser som du deklarerar direkt inom ett namnområde, som inte är kapslade i andra klasser, kan vara antingen offentliga eller interna. Klasser är internal som standard.

Klassmedlemmar, inklusive kapslade klasser, kan vara offentliga, skyddade interna, skyddade, interna, privata eller privata skyddade. Medlemmar är private som standard.

Mer information finns i Åtkomstmodifierare.

Du kan deklarera generiska klasser som har typparametrar. Mer information finns i Allmänna klasser.

En klass kan innehålla deklarationer av följande medlemmar:

Exempel

I följande exempel visas hur du deklarerar klassfält, konstruktorer och metoder. Den visar också objektinstansiering och utskrift av instansdata. I det här exemplet deklareras två klasser. Den första klassen, Child, innehåller två privata fält (name och age), två offentliga konstruktorer och en offentlig metod. Den andra klassen, StringTest, används för att innehålla Main.

class Child
{
    private int age;
    private string name;

    // Default constructor:
    public Child()
    {
        name = "N/A";
    }

    // Constructor:
    public Child(string name, int age)
    {
        this.name = name;
        this.age = age;
    }

    // Printing method:
    public void PrintChild()
    {
        Console.WriteLine("{0}, {1} years old.", name, age);
    }
}

class StringTest
{
    static void Main()
    {
        // Create objects by using the new operator:
        Child child1 = new Child("Craig", 11);
        Child child2 = new Child("Sally", 10);

        // Create an object using the default constructor:
        Child child3 = new Child();

        // Display results:
        Console.Write("Child #1: ");
        child1.PrintChild();
        Console.Write("Child #2: ");
        child2.PrintChild();
        Console.Write("Child #3: ");
        child3.PrintChild();
    }
}
/* Output:
    Child #1: Craig, 11 years old.
    Child #2: Sally, 10 years old.
    Child #3: N/A, 0 years old.
*/

Kommentarer

Observera att de privata fälten (name och age) i föregående exempel endast kan nås via klassens offentliga metod Child . Du kan till exempel inte skriva ut det underordnade namnet från Main metoden med hjälp av en instruktion som den här:

Console.Write(child1.name);   // Error

Det skulle bara vara möjligt att komma åt privata medlemmar i Child från Main om Main de var medlemmar i klassen.

Typer som deklareras i en klass utan en åtkomstmodifierare är standardvärdet private, så datamedlemmarna i det här exemplet skulle fortfarande vara private om nyckelordet togs bort.

Observera slutligen att för objektet som skapades med hjälp av den parameterlösa konstruktorn (child3) age initierades fältet till noll som standard.

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