KlassenClasses

Eine Klasse ist ein Konstrukt, das Ihnen ermöglicht, Ihre eigenen benutzerdefinierten Typen zu erstellen, indem Variablen anderer Typen, Methoden und Ereignisse zusammengefasst werden.A class is a construct that enables you to create your own custom types by grouping together variables of other types, methods and events. Eine Klasse ist mit einem Entwurf vergleichbar.A class is like a blueprint. Sie definiert die Daten und das Verhalten eines Typs.It defines the data and behavior of a type. Wenn die Klasse nicht als statisch deklariert ist, kann der Clientcode diese durch Erstellen von Objekten oder Instanzen verwenden, die einer Variable zugeordnet sind.If the class is not declared as static, client code can use it by creating objects or instances which are assigned to a variable. Die Variable verbleibt im Arbeitsspeicher, bis alle Verweise darauf außerhalb des gültigen Bereichs angezeigt werden.The variable remains in memory until all references to it go out of scope. Zu diesem Zeitpunkt markiert die CLR sie als geeignet für die Garbage Collection.At that time, the CLR marks it as eligible for garbage collection. Wenn die Klasse als statisch deklariert wird, existiert nur eine Kopie im Arbeitsspeicher, und der Clientcode kann darauf nur über die Klasse selbst zugreifen und nicht über eine Instanzvariable.If the class is declared as static, then only one copy exists in memory and client code can only access it through the class itself, not an instance variable. Weitere Informationen finden Sie unter Statische Klassen und statische Klassenmember.For more information, see Static classes and static class members.

VerweistypenReference types

Ein Typ, der als Klasse definiert ist, ist ein Referenztyp.A type that is defined as a class is a reference type. Wenn Sie zur Laufzeit eine Variable eines Referenztyps deklarieren, enthält die Variable zunächst den Wert NULL, bis Sie explizit eine Instanz des Objekts mithilfe des Operators new erstellen oder ihr ein Objekt zuweisen, das an anderer Stelle mithilfe des Operators new erstellt wurde, wie im folgenden Beispiel gezeigt wird:At run time, when you declare a variable of a reference type, the variable contains the value null until you explicitly create an instance of the object by using the new operator, or assign it an object that has been created elsewhere by using new, as shown in the following example:

MyClass mc = new MyClass();  
MyClass mc2 = mc;

Beim Erstellen des Objekts wird der Speicher im verwalteten Heap belegt. Die Variable enthält lediglich einen Verweis auf den Speicherort des Objekts.When the object is created, the memory is allocated on the managed heap, and the variable holds only a reference to the location of the object. Für Typen im verwalteten Heap ist Mehraufwand erforderlich, wenn sie zugewiesen werden und wenn sie von der automatischen Speicherverwaltungsfunktion der CLR freigegeben werden, was als Garbage Collection bezeichnet wird.Types on the managed heap require overhead both when they are allocated and when they are reclaimed by the automatic memory management functionality of the CLR, which is known as garbage collection. Die Garbage Collection ist jedoch auch stark optimiert. In den meisten Szenarios führt sie nicht zu einem Leistungsproblem.However, garbage collection is also highly optimized, and in most scenarios, it does not create a performance issue. Weitere Informationen zur Garbage Collection finden Sie unter Automatische Speicherverwaltung und Garbage Collection.For more information about garbage collection, see Automatic memory management and garbage collection.

Verweistypen unterstützen die Vererbung vollständig. Dies ist ein wesentliches Merkmal der objektorientierten Programmierung.Reference types fully support inheritance, a fundamental characteristic of object-oriented programming. Wenn Sie eine Klasse erstellen, können Sie von einer anderen Schnittstelle oder Klasse erben, die nicht als versiegelt definiert ist. Andere Klassen können von Ihrer Klasse erben und die virtuellen Methoden überschreiben.When you create a class, you can inherit from any other interface or class that is not defined as sealed, and other classes can inherit from your class and override your virtual methods. Weitere Informationen finden Sie unter Vererbung.For more information, see Inheritance.

Deklarieren von KlassenDeclaring classes

Klassen werden mithilfe des Schlüsselworts class deklariert, so wie im folgenden Beispiel dargestellt:Classes are declared by using the class keyword, as shown in the following example:

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

Dem Schlüsselwort class wird der Zugriffsmodifizierer vorangestellt.The class keyword is preceded by the access modifier. Da public in diesem Fall verwendet wird, kann jede Person Objekte aus dieser Klasse erstellen.Because public is used in this case, anyone can create objects from this class. Der Name der Klasse folgt dem Schlüsselwort class.The name of the class follows the class keyword. Der Rest der Definition ist der Text einer Klasse, in dem das Verhalten und die Daten definiert sind.The remainder of the definition is the class body, where the behavior and data are defined. Felder, Eigenschaften, Methoden und Ereignisse für eine Klasse werden zusammen als Klassenmember bezeichnet.Fields, properties, methods, and events on a class are collectively referred to as class members.

Erstellen von ObjektenCreating objects

Eine Klasse definiert einen Objekttyp, ist aber selbst kein Objekt.A class defines a type of object, but it is not an object itself. Ein Objekt ist eine konkrete Entität, basierend auf einer Klasse, und wird manchmal als Instanz einer Klasse bezeichnet.An object is a concrete entity based on a class, and is sometimes referred to as an instance of a class.

Objekte können mithilfe des Schlüsselworts new erstellt werden, gefolgt vom Namen der Klasse, auf die das Objekt basiert, z.B.:Objects can be created by using the new keyword followed by the name of the class that the object will be based on, like this:

Customer object1 = new Customer();

Wenn eine Instanz einer Klasse erstellt wird, wird ein Verweis auf das Objekt an den Programmierer übergeben.When an instance of a class is created, a reference to the object is passed back to the programmer. Im vorherigen Beispiel ist object1 ein Verweis auf ein Objekt, das auf Customer basiert.In the previous example, object1 is a reference to an object that is based on Customer. Dieser Verweis bezieht sich auf das neue Objekt, enthält jedoch nicht die Objektdaten selbst.This reference refers to the new object but does not contain the object data itself. In der Tat können Sie einen Objektverweis erstellen, ohne ein Objekt zu erstellen:In fact, you can create an object reference without creating an object at all:

Customer object2;

Es wird nicht empfohlen, einen Objektverweis wie diesen zu erstellen, der auf kein Objekt verweist. Der Versuch, auf ein Objekt über solch einen Verweis zuzugreifen, schlägt während der Laufzeit fehl.We do not recommend creating object references such as this one that does not refer to an object because trying to access an object through such a reference will fail at run time. Allerdings kann ein solcher Verweis dazu veranlasst werden, auf ein Objekt zu verweisen, indem entweder ein neues Objekt erstellt wird oder indem es einem vorhandenen Objekt zugewiesen wird, z.B.:However, such a reference can be made to refer to an object, either by creating a new object, or by assigning it to an existing object, such as this:

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

Dieser Code erstellt zwei Objektverweise, die beide auf dasselbe Objekt verweisen.This code creates two object references that both refer to the same object. Aus diesem Grund werden alle Änderungen am Objekt, die über object3 getätigt worden sind, bei nachfolgenden Verwendungen von object4 berücksichtigt.Therefore, any changes to the object made through object3 will be reflected in subsequent uses of object4. Da auf Objekte, die auf Klassen basieren, durch Verweise zurückgegriffen wird, sind Klassen als Verweistypen bekannt.Because objects that are based on classes are referred to by reference, classes are known as reference types.

KlassenvererbungClass inheritance

Die Vererbung erfolgt durch Verwendung einer Ableitung, d.h., dass eine Klasse mithilfe einer Basisklasse deklariert wird, von der Sie Daten und Verhalten erbt.Inheritance is accomplished by using a derivation, which means a class is declared by using a base class from which it inherits data and behavior. Eine Basisklasse wird durch Anhängen eines Doppelpunkts sowie den Namen der Basisklasse angegeben, die dem abgeleiteten Klassennamen folgt, z.B.:A base class is specified by appending a colon and the name of the base class following the derived class name, like this:

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 alle Member der Basisklasse mit Ausnahme der Konstruktoren.When a class declares a base class, it inherits all the members of the base class except the constructors.

Anders als in C++ kann eine Klasse in C# nur direkt von einer Basisklasse erben.Unlike C++, a class in C# can only directly inherit from one base class. Da jedoch eine Basisklasse von einer anderen Klasse erben kann, kann eine Klasse indirekt von mehreren Basisklassen erben.However, because a base class may itself inherit from another class, a class may indirectly inherit multiple base classes. Darüber hinaus kann eine Klasse mehr als eine Schnittstelle direkt implementieren.Furthermore, a class can directly implement more than one interface. Weitere Informationen finden Sie unter Schnittstellen.For more information, see Interfaces.

Eine Klasse kann als abstrakt deklariert werden.A class can be declared abstract. Eine abstrakte Klasse enthält abstrakte Methoden, die über eine Signaturdefinition, aber keine Implementierung verfügen.An abstract class contains abstract methods that have a signature definition but no implementation. Abstrakte Klassen dürfen nicht instanziiert werden.Abstract classes cannot be instantiated. Sie können nur mithilfe von abgeleiteten Klassen verwendet werden, die die abstrakten Methoden implementieren.They can only be used through derived classes that implement the abstract methods. Im Gegensatz dazu lässt eine versiegelte Klasse nicht zu, dass andere Klassen von ihr ableiten.By contrast, a sealed class does not allow other classes to derive from it. Weitere Informationen finden Sie unter Abstrakte und versiegelte Klassen und Klassenmember.For more information, see Abstract and sealed classes and class members.

Klassendefinitionen können zwischen verschiedenen Quelldateien aufgeteilt werden.Class definitions can be split between different source files. Weitere Informationen finden Sie unter Partielle Klassendefinitionen.For more information, see Partial class definitions.

BeispielExample

Im folgenden Beispiel wird eine öffentliche Klasse, die ein einzelnes Feld, eine Methode und eine spezielle Methode namens Konstruktor enthält, definiert.In the following example, a public class that contains a single field, a method, and a special method called a constructor is defined. Weitere Informationen finden Sie unter Konstruktoren.For more information, see Constructors. Die Klasse wird dann mit dem Schlüsselwort new instanziiert.The class is then instantiated with the new keyword.

public class Person
{
    // Field
    public string name;

    // Constructor that takes no arguments.
    public Person()
    {
        name = "unknown";
    }

    // Constructor that takes one argument.
    public Person(string nm)
    {
        name = nm;
    }

    // Method
    public void SetName(string newName)
    {
        name = newName;
    }
}
class TestPerson
{
    static void Main()
    {
        // Call the constructor that has no parameters.
        Person person1 = new Person();
        Console.WriteLine(person1.name);

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

        // Call the constructor that has one parameter.
        Person person2 = new Person("Sarah Jones");
        Console.WriteLine(person2.name);

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

C#-SprachspezifikationC# language specification

Weitere Informationen finden Sie unter C#-Sprachspezifikation.For more information, see the C# language specification. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.The language specification is the definitive source for C# syntax and usage.

Siehe auchSee also

C#-Programmierhandbuch C# programming guide
Polymorphismus Polymorphism
Class and struct members (Klassen- und Strukturmember) Class and struct members
Class and struct methods (Klassen- und Strukturmethoden) Class and struct methods
Konstruktoren Constructors
Finalizer Finalizers
ObjekteObjects