Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In C# entspricht die Definition eines Typs – einer Klasse, einer Struktur oder eines Datensatzes – einem Blueprint, der angibt, was der Typ tun kann. Ein Objekt ist im Grunde ein Speicherblock, der gemäß dem Blueprint zugeordnet und konfiguriert ist. Dieser Artikel enthält eine Übersicht über diese Blueprints und deren Features. Im nächsten Artikel dieser Reihe werden Objekte vorgestellt.
Kapselung
Kapselung wird manchmal als erste Säule oder Prinzip der objektorientierten Programmierung bezeichnet. Eine Klasse oder Struktur kann festlegen, wie zugänglich jedes ihrer Elemente für Code außerhalb der Klasse oder Struktur ist. Mitglieder, die nicht für Verbraucher außerhalb der Klasse oder Assembly vorgesehen sind, sind ausgeblendet, um das Potenzial für Codierungsfehler oder böswillige Exploits zu begrenzen. Weitere Informationen finden Sie im Lernprogramm zur objektorientierten Programmierung .
Elemente
Die Member eines Typs enthalten alle Methoden, Felder, Konstanten, Eigenschaften und Ereignisse. In C# gibt es keine globalen Variablen oder Methoden, wie es sie in einigen anderen Sprachen gibt. Selbst der Einstiegspunkt eines Programms, die Main Methode, muss innerhalb einer Klasse oder Struktur deklariert werden (implizit, wenn Sie Anweisungen der obersten Ebene verwenden).
Die folgende Liste enthält alle Arten von Membern, die in einer Klasse, Struktur oder einem Datensatz deklariert werden können.
- Felder
- Konstanten
- Eigenschaften
- Methodik
- Erbauer
- Ereignisse
- Finalizer
- Indexierer
- Betriebspersonal
- Geschachtelte Typen
Weitere Informationen finden Sie unter "Member".
Zugänglichkeit
Einige Methoden und Eigenschaften sollen von Code außerhalb einer Klasse oder Struktur aufgerufen oder zugegriffen werden, der als Clientcode bezeichnet wird. Andere Methoden und Eigenschaften können nur für die Verwendung in der Klasse oder Struktur selbst verwendet werden. Es ist wichtig, die Barrierefreiheit Ihres Codes einzuschränken, damit nur der beabsichtigte Clientcode ihn erreichen kann. Mit den folgenden Zugriffsmodifizierern legen Sie fest, wie zugänglich Ihre Typen und deren Mitglieder für Clientcode sind:
Die Standardeinstellung für den Zugriff lautet private.
Vererbung
Klassen (aber keine Strukturen) unterstützen das Vererbungskonzept. Eine Klasse, die von einer anderen Klasse abgeleitet wird, die als Basisklasse bezeichnet wird, enthält automatisch alle öffentlichen, geschützten und internen Member der Basisklasse mit Ausnahme der Konstruktoren und Finalizer.
Klassen können als abstrakt deklariert werden, was bedeutet, dass eine oder mehrere ihrer Methoden keine Implementierung haben. Obwohl abstrakte Klassen nicht direkt instanziiert werden können, können sie als Basisklassen für andere Klassen dienen, die die fehlende Implementierung bereitstellen. Klassen können auch als versiegelt deklariert werden, um zu verhindern, dass andere Klassen von ihnen erben.
Weitere Informationen finden Sie unter Vererbung und Polymorphismus.
Schnittstellen
Klassen, Strukturen und Datensätze können mehrere Schnittstellen implementieren. Um von einer Schnittstelle zu implementieren, bedeutet dies, dass der Typ alle in der Schnittstelle definierten Methoden implementiert. Weitere Informationen finden Sie unter Schnittstellen.
Generische Typen
Klassen, Strukturen und Datensätze können mit einem oder mehreren Typparametern definiert werden. Der Clientcode gibt den Typ an, wenn er eine Instanz des Typs erstellt. Beispielsweise wird die List<T> Klasse im System.Collections.Generic Namespace mit einem Typparameter definiert. Clientcode erstellt eine Instanz eines List<string> oder List<int> und gibt damit den Typ an, den die Liste enthält. Weitere Informationen finden Sie unter Generics.
Statische Typen
Klassen (aber keine Strukturen oder Datensätze) können als staticdeklariert werden. Eine statische Klasse kann nur statische Member enthalten und kann nicht mit dem new Schlüsselwort instanziiert werden. Eine Kopie der Klasse wird beim Laden des Programms in den Arbeitsspeicher geladen, und die Member werden über den Klassennamen aufgerufen. Klassen, Strukturen und Datensätze können statische Member enthalten. Weitere Informationen finden Sie unter Statische Klassen und statische Klassenmitglieder.
Geschachtelte Typen
Eine Klasse, Struktur oder ein Datensatz kann in einer anderen Klasse, Struktur oder einem anderen Datensatz geschachtelt werden. Weitere Informationen finden Sie unter Geschachtelte Typen.
Teiltypen
Sie können einen Teil einer Klasse, Struktur oder Methode in einer Codedatei und einem anderen Teil in einer separaten Codedatei definieren. Weitere Informationen finden Sie unter Partielle Klassen und Methoden.
Objektinitialisierer
Sie können Klassen- oder Strukturobjekte und Auflistungen von Objekten instanziieren und initialisieren, indem Sie ihren Eigenschaften Werte zuweisen. Weitere Informationen finden Sie unter Initialisieren von Objekten mithilfe eines Objektinitialisierers.
Anonyme Typen
In Situationen, in denen es nicht bequem oder erforderlich ist, eine benannte Klasse zu erstellen, verwenden Sie anonyme Typen. Benannte Datenmitglieder definieren anonyme Typen. Weitere Informationen finden Sie unter "Anonyme Typen".
Erweiterungsmember
Sie können eine Klasse "erweitern", ohne eine abgeleitete Klasse zu erstellen, indem Sie einen separaten Typ erstellen. Dieser Typ enthält Methoden, die aufgerufen werden können, als ob sie zum ursprünglichen Typ gehörten. Weitere Informationen finden Sie unter Erweiterungsmethoden.
Implizit eingegebene lokale Variablen
Innerhalb einer Klasse oder Strukturmethode können Sie implizite Eingaben verwenden, um den Compiler anzuweisen, den Typ einer Variablen zur Kompilierungszeit zu bestimmen. Weitere Informationen finden Sie unter var (C#-Referenz).
Aufzeichnungen
Sie können den record Modifizierer einer Klasse oder einer Struktur hinzufügen. Datensätze sind Typen mit integriertem Verhalten für wertbasierte Gleichheit. Ein Datensatz (entweder record class oder record struct) stellt die folgenden Features bereit:
- Präzise Syntax zum Erstellen eines Verweistyps mit unveränderlichen Eigenschaften.
- Wertgleichheit. Zwei Variablen eines Datensatztyps sind gleich, wenn sie denselben Typ haben, und wenn für jedes Feld die Werte in beiden Datensätzen gleich sind. Klassen verwenden die Referenzgleichheit: Zwei Variablen eines Klassentyps sind gleich, wenn sie auf dasselbe Objekt verweisen.
- Präzise Syntax für nicht destruktive Mutation.
Mit einem
withAusdruck können Sie eine neue Datensatzinstanz erstellen, bei der es sich um eine Kopie einer vorhandenen Instanz handelt, jedoch mit geänderten Eigenschaftswerten. - Integrierte Formatierung für die Anzeige.
Die
ToStringMethode druckt den Namen des Datensatztyps und die Namen und Werte öffentlicher Eigenschaften. - Unterstützung für Vererbungshierarchien in Datensatzklassen. Datensatzklassen unterstützen die Vererbung. Recordstrukturen unterstützen keine Vererbung.
Weitere Informationen finden Sie unter "Datensätze".
C#-Sprachspezifikation
Weitere Informationen erhalten Sie unter C#-Sprachspezifikation. Die Sprachspezifikation ist die endgültige Quelle für C#-Syntax und -Verwendung.