class (C#-Referenz)

Klassen werden mithilfe des Schlüsselworts class deklariert, wie im folgenden Beispiel dargestellt:

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

Hinweise

In C# ist nur die einfache Vererbung zulässig. Eine Klasse kann also Implementierungen aus nur einer Basisklasse erben. Es kann allerdings mehr als eine Schnittstelle implementiert werden. Die folgende Tabelle zeigt Beispiele für Klassenvererbung und Implementierung der Schnittstelle:

Vererbung Beispiel
Keine class ClassA { }
Single class DerivedClass : BaseClass { }
Keine, Implementierung von zwei Schnittstellen class ImplClass : IFace1, IFace2 { }
Single, Implementierung einer Schnittstelle class ImplDerivedClass : BaseClass, IFace1 { }

Klassen, die Sie direkt innerhalb eines Namespace und nicht in anderen Klassen geschachtelt deklarieren, können entweder public oder internal sein. Klassen sind standardmäßig internal.

Klassenmember, einschließlich geschachtelter Klassen, können öffentlich, intern geschützt, geschützt, intern, privat geschützt oder privat sein. Member sind standardmäßig private.

Weitere Informationen finden Sie unter Zugriffsmodifizierer.

Sie können generische Klassen deklarieren, die über Typparameter verfügen. Weitere Informationen finden Sie unter Generische Klassen.

Eine Klasse kann Deklarationen der folgenden Member enthalten:

Beispiel

Das folgende Beispiel zeigt das Deklarieren von Klassenfeldern, Konstruktoren und Methoden. Darüber hinaus veranschaulicht es Objektinstanziierung und Ausgabe von Instanzdaten. In diesem Beispiel werden zwei Klassen deklariert. Die erste Klasse, Child, enthält zwei private Felder (name und age), zwei öffentliche Konstruktoren und eine öffentliche Methode. Die zweite Klasse, StringTest, enthält 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.
*/

Kommentare

Beachten Sie, dass im vorherigen Beispiel nur über die öffentliche Methode der Klasse Child auf die privaten Felder (name und age) zugegriffen werden kann. Sie können z.B. den Namen des untergeordneten Elements nicht aus der Main-Methode mit einer Anweisung wie folgt drucken:

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

Zugriff auf private Member der Child von Main wäre nur möglich, wenn Main ein Member der Klasse wäre.

Typen, die innerhalb einer Klasse ohne Zugriffsmodifizierer deklariert werden, sind standardmäßig private, sodass die Datenmember in diesem Beispiel dennoch private wären, wenn das Schlüsselwort entfernt worden wäre.

Beachten Sie schließlich, dass für das Objekt, das mit dem parameterlosen Konstruktor (child3) erstellt wurde, das Feld age standardmäßig auf 0 (null) initialisiert wurde.

C#-Sprachspezifikation

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

Siehe auch