Eine Schnittstelle in C# definiert einen Vertrag zwischen verschiedenen Klassen oder Strukturen. Jeder Typ, der diesen Vertrag implementiert, muss die in der Schnittstelle definierten Member bereitstellen. Eine Schnittstelle kann auch eine Standardimplementierung für bestimmte Member enthalten. Ab C# 11 können Schnittstellen sogar static abstract- oder static virtual-Member definieren, um bestimmte Anforderungen an die implementierenden Typen festzulegen.
Beispiel einer Schnittstelle
Hier ist ein Beispiel, wie eine Schnittstelle in C# definiert und implementiert werden kann:
interface ISampleInterface {
void SampleMethod();
}
class ImplementationClass : ISampleInterface {
public void SampleMethod() {
// Method implementation
}
static void Main() {
ISampleInterface obj = new ImplementationClass();
obj.SampleMethod();
}
}
Eine Schnittstelle kann verschiedene Arten von Membern enthalten, wie Methoden, Eigenschaften, Indexer und Ereignisse. Diese Mitglieder sind nur Signaturen ohne Implementierung.
Standardschnittstellenmember
Schnittstellen können auch Member enthalten, die bereits eine Standardimplementierung haben. Einige Beispiele für solche Member sind Konstanten, Operatoren, statische Konstruktoren und geschachtelte Typen. Diese Standardimplementierungen ermöglichen es der Schnittstelle, eine allgemeine Funktionalität bereitzustellen, wenn keine überschreibende Implementierung bereitgestellt wird.
Statische abstrakte und virtuelle Member
Ab C# 11 können Schnittstellen auch static abstract- und static virtual-Member definieren. Diese Member können für verschiedene Membertypen, außer Felder, deklariert werden. Mit diesem Feature können generische Algorithmen ein zahlenähnliches Verhalten angeben. Beispiele dafür sind die numerischen Typen in der .NET-Runtime. Der Compiler löst Aufrufe von static virtual- und static abstract-Methoden zur Kompilierzeit auf und verwendet die verfügbaren Typinformationen.
Schnittstellenvererbung
Eine Schnittstelle kann von einer oder mehreren Basisschnittstellen erben. Wenn eine Methode in einer Schnittstelle überschrieben wird, die bereits in einer Basisschnittstelle implementiert ist, muss die explizite Schnittstellenimplementierung verwendet werden.
Beispielschnittstellenimplementierungen
Hier ist ein Beispiel, wie eine Schnittstelle in C# implementiert werden kann:
interface IPoint {
int X { get; set; }
int Y { get; set; }
double Distance { get; }
}
class Point : IPoint {
public int X { get; set; }
public int Y { get; set; }
public double Distance => Math.Sqrt(X * X + Y * Y);
}
class MainClass {
static void PrintPoint(IPoint p) {
Console.WriteLine("x={0}, y={1}", p.X, p.Y);
}
static void Main() {
IPoint p = new Point(2, 3);
Console.Write("My Point: ");
PrintPoint(p);
}
}
In diesem Beispiel implementiert die Klasse Point
die Schnittstelle IPoint
. Eine Instanz der Klasse Point
hat die ganzzahligen Eigenschaften X
und Y
. Die Methode PrintPoint
akzeptiert eine Instanz der Schnittstelle IPoint
und gibt die Werte von X
und Y
aus.
Das Interface ist ein leistungsstarkes Konzept in C#, das die Flexibilität und Wiederverwendbarkeit von Code erhöht. Es ermöglicht die Trennung von Vertrag und Implementierung und fördert die Erstellung sauberer und modularer Code. Weitere Informationen finden Sie in der C#-Sprachspezifikation und im C#-Programmierhandbuch.