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#.