Schnittstellen (C#-Programmierhandbuch)Interfaces (C# Programming Guide)

Eine Schnittstelle enthält Definitionen für eine Gruppe von zugehörigen Funktionalitäten, die von einer Klasse oder einer Struktur implementiert werden können.An interface contains definitions for a group of related functionalities that a class or a struct can implement.

Durch die Verwendung von Schnittstellen können Sie beispielsweise das Verhalten aus mehreren Quellen in einer Klasse einbeziehen.By using interfaces, you can, for example, include behavior from multiple sources in a class. Diese Funktion ist wichtig in C#, da die Sprache die mehrfache Vererbung von Klassen nicht unterstützt.That capability is important in C# because the language doesn't support multiple inheritance of classes. Zudem müssen Sie eine Schnittstelle verwenden, wenn Sie die Vererbung für Strukturen simulieren möchten, da sie tatsächlich nicht von einer anderen Struktur oder Klasse erben können.In addition, you must use an interface if you want to simulate inheritance for structs, because they can't actually inherit from another struct or class.

Sie definieren eine Schnittstelle durch die Verwendung des Schlüsselworts interface, wie im folgenden Beispiel gezeigt.You define an interface by using the interface keyword, as the following example shows.

interface IEquatable<T>
{
    bool Equals(T obj);
}

Jede die IEquatable<T>-Schnittstelle implementierende Klasse oder Struktur muss eine Definition für eine Equals-Methode enthalten, die mit der Signatur übereinstimmt, die durch die Schnittstelle angegeben wird.Any class or struct that implements the IEquatable<T> interface must contain a definition for an Equals method that matches the signature that the interface specifies. Daher können Sie auf eine Klasse zählen, die IEquatable<T> für die Einbeziehung einer Equals-Methode implementiert, mit der eine Instanz der Klasse bestimmen kann, ob es sich zu einer anderen Instanz derselben Klasse identisch verhält.As a result, you can count on a class that implements IEquatable<T> to contain an Equals method with which an instance of the class can determine whether it's equal to another instance of the same class.

Die Definition für IEquatable<T> stellt keine Implementierung für Equals bereit.The definition of IEquatable<T> doesn’t provide an implementation for Equals. Die Schnittstelle definiert nur die Signatur.The interface defines only the signature. Auf diese Weise ähnelt eine Schnittstelle in C# einer abstrakten Klasse, in der alle Methoden abstrakt sind.In that way, an interface in C# is similar to an abstract class in which all the methods are abstract. Eine Klasse oder Struktur kann jedoch mehrere Schnittstellen implementieren. Eine Klasse kann jedoch nur eine einzelne Klasse, ein Abstrakt oder nichts erben.However, a class or struct can implement multiple interfaces, but a class can inherit only a single class, abstract or not. Daher können Sie durch die Verwendung von Schnittstellen das Verhalten von mehreren Quellen in einer Klasse einbeziehen.Therefore, by using interfaces, you can include behavior from multiple sources in a class.

Weitere Informationen zu abstrakten Klassen finden Sie unter Abstrakte und versiegelte Klassen und Klassenmember.For more information about abstract classes, see Abstract and Sealed Classes and Class Members.

Schnittstellen können Methoden, Eigenschaften, Ereignisse, Indexer oder eine beliebige Kombination aus diesen vier Membertypen enthalten.Interfaces can contain methods, properties, events, indexers, or any combination of those four member types. Links zu den Beispielen finden Sie unter Verwandte Abschnitte.For links to examples, see Related Sections. Eine Schnittstelle kann weder Konstanten, Felder, Operatoren, Instanzkonstruktoren, Finalizer noch Typen enthalten.An interface can't contain constants, fields, operators, instance constructors, finalizers, or types. Schnittstellenmember sind automatisch öffentlich, und sie können keine Zugriffsmodifizierer enthalten.Interface members are automatically public, and they can't include any access modifiers. Member können zudem nicht statisch sein.Members also can't be static.

Zum Implementieren eines Schnittstellenmembers muss das entsprechende Member der Implementierungsklasse öffentlich und nicht statisch sein und muss über denselben Namen und die Signatur wie das Schnittstellenmember verfügen.To implement an interface member, the corresponding member of the implementing class must be public, non-static, and have the same name and signature as the interface member.

Wenn eine Klasse oder Struktur eine Schnittstelle implementiert, muss die Klasse oder Struktur eine Implementierung für alle Member bereitstellen, die durch die Schnittstelle definiert wird.When a class or struct implements an interface, the class or struct must provide an implementation for all of the members that the interface defines. Die Schnittstelle an sich stellt keine Funktionalität bereit, die eine Klasse oder Struktur dergestalt erben kann, sodass es die Funktionalität der Basisklasse erben kannThe interface itself provides no functionality that a class or struct can inherit in the way that it can inherit base class functionality. Wenn eine Basisklasse jedoch eine Schnittstelle implementiert, erbt jede aus der Basisklasse abgeleitete Klasse diese Implementierung.However, if a base class implements an interface, any class that's derived from the base class inherits that implementation.

Das folgenden Beispiel zeigt eine Implementierung der IEquatable<T>-Schnittstelle.The following example shows an implementation of the IEquatable<T> interface. Die Implementierungsklasse Car muss die Implementierung der Equals-Methode bereitstellen.The implementing class, Car, must provide an implementation of the Equals method.

public class Car : IEquatable<Car>
{
    public string Make {get; set;}
    public string Model { get; set; }
    public string Year { get; set; }

    // Implementation of IEquatable<T> interface
    public bool Equals(Car car)
    {
        if (this.Make == car.Make &&
            this.Model == car.Model &&
            this.Year == car.Year)
        {
            return true;
        }
        else
            return false;
    }
}

Eigenschaften und Indexer einer Klasse können zusätzliche Accessors für eine Eigenschaft oder einen in einer Schnittstelle definierten Indexer definieren.Properties and indexers of a class can define extra accessors for a property or indexer that's defined in an interface. Beispielsweise kann eine Schnittstelle eine Eigenschaft deklarieren, die einen Get-Accessor aufweist.For example, an interface might declare a property that has a get accessor. Die Klasse zur Implementierung der Schnittstelle kann dieselbe Eigenschaft mit einem get- und einem set-Accessor deklarieren.The class that implements the interface can declare the same property with both a get and set accessor. Wenn die Eigenschaft oder der Indexer jedoch die explizite Implementierung verwendet, müssen die Accessors übereinstimmen.However, if the property or indexer uses explicit implementation, the accessors must match. Weitere Informationen zur expliziten Implementierung finden Sie unter Explizite Schnittstellenimplementierung und unter Schnittstelleneigenschaften.For more information about explicit implementation, see Explicit Interface Implementation and Interface Properties.

Schnittstellen können andere Schnittstellen implementieren.Interfaces can implement other interfaces. Eine Klasse kann eine Schnittstelle mehrfach über geerbte Basisklassen einbeziehen, die sie erbt, oder über Schnittstellen, die von anderen Schnittstellen implementiert werden.A class might include an interface multiple times through base classes that it inherits or through interfaces that other interfaces implement. Die Klasse kann jedoch nur einmal eine Implementierung einer Schnittstelle bereitstellen und auch nur dann, wenn die Klasse die Schnittstelle als Bestandteil der Definition der Klasse (class ClassName : InterfaceName) deklariert.However, the class can provide an implementation of an interface only one time and only if the class declares the interface as part of the definition of the class (class ClassName : InterfaceName). Wenn die Schnittstelle geerbt wurde, da Sie eine Basisklasse geerbt haben, die die Schnittstelle implementiert, bietet die Basisklasse die Implementierung der Member der Schnittstelle.If the interface is inherited because you inherited a base class that implements the interface, the base class provides the implementation of the members of the interface. Die abgeleitete Klasse kann jedoch anstelle der Verwendung der geerbten Implementierung die Schnittstellenmember erneut implementieren.However, the derived class can reimplement the interface members instead of using the inherited implementation.

Eine Basisklasse kann zudem Schnittstellenmember mithilfe von virtuellen Membern implementieren.A base class can also implement interface members by using virtual members. In diesem Fall kann eine abgeleitete Klasse das Schnittstellenverhalten durch das Überschreiben der virtuellen Member ändern.In that case, a derived class can change the interface behavior by overriding the virtual members. Weitere Informationen über virtuelle Member finden Sie unter Polymorphie.For more information about virtual members, see Polymorphism.

Zusammenfassung zu SchnittstellenInterfaces Summary

Eine Schnittstelle verfügt über die folgenden Eigenschaften:An interface has the following properties:

  • Eine Schnittstelle ähnelt einer abstrakten Basisklasse.An interface is like an abstract base class. Jede die Schnittstelle implementierende Klasse oder Struktur muss alle zugehörigen Member implementieren.Any class or struct that implements the interface must implement all its members.

  • Eine Schnittstelle kann nicht direkt instanziiert werden.An interface can't be instantiated directly. Die zugehörigen Member werden durch die die Schnittstelle implementierende Klasse oder Struktur implementiert.Its members are implemented by any class or struct that implements the interface.

  • Schnittstellen können Ereignisse, Indexer, Methoden und Eigenschaften enthalten.Interfaces can contain events, indexers, methods, and properties.

  • Schnittstellen enthalten keine Implementierung von Methoden.Interfaces contain no implementation of methods.

  • Eine Klasse oder Struktur kann mehrere Schnittstellen implementieren.A class or struct can implement multiple interfaces. Eine Klasse kann eine Basisklasse erben und zudem eine oder mehrere Schnittstellen implementieren.A class can inherit a base class and also implement one or more interfaces.

In diesem AbschnittIn This Section

Explizite SchnittstellenimplementierungExplicit Interface Implementation
Erläutert das Erstellen eines für eine Schnittstelle spezifischen Klassenmembers.Explains how to create a class member that’s specific to an interface.

Gewusst wie: Explizites Implementieren von SchnittstellenmembernHow to: Explicitly Implement Interface Members
Enthält ein Beispiel über das explizite Implementieren von Schnittstellenmembern.Provides an example of how to explicitly implement members of interfaces.

Gewusst wie: Explizites Implementieren von Membern zweier SchnittstellenHow to: Explicitly Implement Members of Two Interfaces
Enthält ein Beispiel über das explizite Implementieren von Schnittstellenmembern mit Vererbung.Provides an example of how to explicitly implement members of interfaces with inheritance.

Verwandte AbschnitteRelated Sections

Interfaces (Schnittstellen) in Learning C# 3.0: Master the Fundamentals of C# 3.0 (C# 3.0 lernen: Die Grundlagen von C# 3.0 meistern)Interfaces in Learning C# 3.0: Master the Fundamentals of C# 3.0

Siehe auchSee Also

C#-ProgrammierhandbuchC# Programming Guide
VererbungInheritance