class (C#-Referenz)
Klassen werden wie im folgenden Beispiel mit dem class-Schlüsselwort deklariert:
class TestClass
{
// Methods, properties, fields, events, delegates
// and nested classes go here.
}
Hinweise
Nur einzelne Vererbung wird in C# zulässig. Dies bedeutet, dass eine Implementierung nur von einer Basisklasse an eine Klasse vererbt werden kann. Eine Klasse kann jedoch mehr als eine Schnittstelle implementieren. In der folgenden Tabelle sind Beispiele für Klassenvererbung und Schnittstellenimplementierung aufgeführt:
Vererbung |
Beispiel |
---|---|
Keine |
class ClassA { } |
Single |
class DerivedClass: BaseClass { } |
Keine, Implementierung von zwei Schnittstellen |
class ImplClass: IFace1, IFace2 { } |
Einfache, Implementierung einer Schnittstelle |
class ImplDerivedClass: BaseClass, IFace1 { } |
Die Klassen, die Sie direkt innerhalb eines Namespace deklarieren, geschachtelt nicht innerhalb anderer Klassen, können entweder Öffentlich oder intern sein. Klassen sind internal standardmäßig.
Klassenmember, einschließlich geschachtelte Klassen, können Öffentlich, protected internal, geschützt, intern oder privat sein. Member sind privat standardmäßig.
Weitere Informationen finden Sie unter Zugriffsmodifizierer (C#-Programmierhandbuch).
Sie können generische Klassen deklarieren, die Typparameter verfügen. Weitere Informationen finden Sie unter Generische Klassen.
Eine Klasse kann Deklarationen der folgenden Member umfassen:
Beispiel
Im folgenden Beispiel wird erläutert, wie Klassenfelder, Konstruktoren und Methoden deklariert werden. Zusätzlich wird die Objektinstanziierung sowie die Ausgabe von Instanzdaten veranschaulicht. In diesem Beispiel werden zwei Klassen deklariert: die Klasse Child, die zwei private Felder (name und age) sowie zwei öffentliche Methoden enthält, Die zweite Klasse, StringTest, wird verwendet, da sie Main enthält.
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 auf die privaten Felder (name und age) im vorherigen Beispiel nur über die öffentlichen Methoden der Child-Klasse zugegriffen werden kann. Mit der folgenden Anweisung ist es z. B. nicht möglich, den Namen des Kindes über die Main-Methode auszugeben:
Console.Write(child1.name); // Error
Main könnte nur dann auf private Member von Child zugreifen, wenn Main ein Member der Klasse wäre.
Die Typen, die in einer Klasse ohne einen Zugriffsmodifizierer deklariert werden, führen zu private, daher werden die Datenmember in diesem Beispiel noch private sein, wenn das - Schlüsselwort entfernt wurden.
Beachten Sie schließlich, dass das Altersfeld für das mit dem Standardkonstruktor (child3) erstellte Objekt mit dem Wert 0 (null) initialisiert wurde.
C#-Programmiersprachenspezifikation
Weitere Informationen erhalten Sie unter C#-Sprachspezifikation. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.