Freigeben über


Klassen (C#-Programmierhandbuch)

Aktualisiert: Juli 2008

Eine Klasse ist ein Konstrukt, mit dem benutzerdefinierte Typen erstellt werden können, indem Variablen anderer Typen, Methoden und Ereignisse zusammengefasst werden. Eine Klasse ist mit einem Entwurf vergleichbar. Sie definiert die Daten und das Verhalten eines Typs. Wenn die Klasse nicht als statisch deklariert ist, kann Clientcode sie durch das Erstellen von Objekten oder Instanzen verwenden, die einer Variablen zugewiesen werden. Die Variable verbleibt im Arbeitsspeicher, bis alle Verweise darauf den Bereich verlassen. Zu diesem Zeitpunkt markiert die CLR sie als für die Garbage Collection freigegeben. Wenn die Klasse als statisch deklariert ist, ist nur eine Kopie im Speicher vorhanden, und Clientcode kann darauf nur über die Klasse selbst und nicht über eine Instanzvariable zugreifen. Weitere Informationen finden Sie unter Statische Klassen und statische Klassenmember (C#-Programmierhandbuch).

Im Gegensatz zu Strukturen unterstützen Klassen Vererbung. Dies ist ein wesentlicher Aspekt der objektorientierten Programmierung. Weitere Informationen finden Sie unter Vererbung (C#-Programmierhandbuch).

Deklarieren von Klassen

Wie im folgenden Beispiel dargestellt, werden Klassen mit dem class-Schlüsselwort deklariert:

public class Customer
{
    //Fields, properties, methods and events go here...
}

Dem class-Schlüsselwort wird die Zugriffsebene vorangestellt. Da in diesem Fall public verwendet wird, können alle Benutzer Objekte von dieser Klasse erstellen. Der Name der Klasse folgt auf das class-Schlüsselwort. Der Rest der Definition ist der Klassentext, in dem das Verhalten und die Daten definiert werden. Die Felder, Eigenschaften, Methoden und Ereignisse für eine Klasse werden zusammen als Klassenmember bezeichnet.

Erstellen von Objekten

Obwohl die Begriffe manchmal als Synonyme verwendet werden, sind Klassen und Objekte voneinander zu unterscheiden. Eine Klasse definiert einen Objekttyp, ist aber selbst kein Objekt. Ein Objekt ist eine konkrete Entität, die auf einer Klasse basiert und manchmal als Instanz einer Klasse bezeichnet wird.

Objekte können mit dem new-Schlüsselwort erstellt werden, an das der Name der Klasse angehängt wird, auf dem das Objekt basiert. Beispiel:

Customer object1 = new Customer();

Beim Erstellen einer Klasseninstanz wird ein Verweis auf das Objekt an den Programmierer zurückgegeben. Im vorherigen Beispiel ist object1 ein Verweis auf ein Objekt, das auf Customer basiert. Dieser Verweis verweist auf das neue Objekt, er enthält aber nicht die Objektdaten selbst. In der Tat können Sie einen Objektverweis erstellen, ohne dabei ein Objekt zu erstellen:

Customer object2;

Es wird davon abgeraten, Objektverweise wie diesen zu erstellen, der nicht auf ein Objekt verweist, da beim Zugriff auf ein Objekt über einen solchen Verweis zur Laufzeit ein Fehler auftritt. Sie können einen solchen Verweis jedoch erstellen, um auf ein Objekt zu verweisen, indem Sie entweder ein neues Objekt erstellen oder es einem vorhandenen Objekt zuweisen. Beispiel:

Customer object3 = new Customer();
Customer object4 = object3;

In diesem Code werden zwei Objektverweise erstellt, die beide auf dasselbe Objekt verweisen. Daher wirken sich durch object3 am Objekt vorgenommene Änderungen auf nachfolgende Verwendungen von object4 aus. Da auf Objekte, die auf Klassen basieren, mit Verweisen verwiesen wird, werden Klassen auch als Referenztypen bezeichnet.

Klassenvererbung

Vererbung wird mithilfe einer Ableitung erreicht. Dies bedeutet, dass eine Klasse mit einer Basisklasse deklariert wird, von der sie Daten und Verhalten erbt. Eine Basisklasse wird angegeben, indem wie im folgenden Beispiel ein Punkt und der Name der Basisklasse sowie der Name der abgeleiteten Klasse angehängt werden:

public class Manager : Employee
{
    // Employee fields, properties, methods and events are inherited
    // New Manager fields, properties, methods and events go here...
}

Wenn eine Klasse eine Basisklasse deklariert, erbt sie sämtliche Member der Basisklasse mit Ausnahme der Konstruktoren.

Anders als in C++ kann eine Klasse in C# nur von einer Basisklasse direkt erben. Da eine Basisklasse jedoch selbst von einer anderen Klasse erben kann, kann eine Klasse indirekt von mehreren Basisklassen erben. Außerdem kann eine Klasse mehrere Schnittstellen direkt implementieren. Weitere Informationen finden Sie unter Schnittstellen (C#-Programmierhandbuch).

Eine Klasse kann als abstrakt deklariert werden. Eine abstrakte Klasse enthält abstrakte Methoden, die über eine Signaturdefinition, jedoch nicht über eine Implementierung verfügen. Abstrakte Klassen können nicht instanziiert werden. Sie können nur mithilfe von abgeleiteten Klassen verwendet werden, die die abstrakten Methoden implementieren. Im Gegensatz dazu können von versiegelten Klassen keine anderen Klassen abgeleitet werden. Weitere Informationen hierzu finden Sie unter Abstrakte und versiegelte Klassen und Klassenmember (C#-Programmierhandbuch).

Klassendefinitionen können auf verschiedene Quelldateien verteilt sein. Weitere Informationen finden Sie unter Partielle Klassen und Methoden (C#-Programmierhandbuch).

Beschreibung

Im folgenden Beispiel wird eine öffentliche Klasse definiert, die ein einzelnes Feld, eine Methode und eine spezielle, als Konstruktor bezeichnete Methode enthält. Weitere Informationen finden Sie unter Konstruktoren (C#-Programmierhandbuch). Die Klasse wird dann mit dem new-Schlüsselwort instanziiert.

Beispiel

public class Person
{
    // Field
    public string name;

    // Constructor
    public Person()
    {
        name = "unknown";
    }

    // Method
    public void SetName(string newName)
    {
        name = newName;
    }
}
class TestPerson
{
    static void Main()
    {
        Person person = new Person();
        Console.WriteLine(person.name);

        person.SetName("John Smith");
        Console.WriteLine(person.name);

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
/* Output:
    unknown
    John Smith
*/

C#-Programmiersprachenspezifikation

Weitere Informationen finden Sie in den folgenden Abschnitten von C#-Programmiersprachenspezifikation:

  • 1.6. Klassen und Objekte

  • 10 Klassen

Siehe auch

Konzepte

C#-Programmierhandbuch

Referenz

Member (C#-Programmierhandbuch)

Methoden (C#-Programmierhandbuch)

Konstruktoren (C#-Programmierhandbuch)

Destruktoren (C#-Programmierhandbuch)

Objekte (C#-Programmierhandbuch)

Änderungsprotokoll

Date

Versionsgeschichte

Grund

Juli 2008

Irreführende Aussage über Basiszugriff entfernt.