interface (C#-Referenz)interface (C# Reference)

Eine Schnittstelle definiert einen Vertrag.An interface defines a contract. Jede class oder struct, die diesen Vertrag implementiert, muss eine Implementierung der in der Schnittstelle definierten Member bereitstellen.Any class or struct that implements that contract must provide an implementation of the members defined in the interface. Ab C# 8.0 kann eine Schnittstelle eine Standardimplementierung für Member definieren.Beginning with C# 8.0, an interface may define a default implementation for members. Sie kann auch static-Member definieren, um eine einzelne Implementierung für allgemeine Funktionen bereitzustellen.It may also define static members in order to provide a single implementation for common functionality.

Im folgenden Beispiel muss die Klasse ImplementationClass eine Methode mit dem Namen SampleMethod implementieren, die keine Parameter hat und void zurückgibt.In the following example, class ImplementationClass must implement a method named SampleMethod that has no parameters and returns void.

Weitere Informationen und Beispiele finden Sie unter Schnittstellen.For more information and examples, see Interfaces.

BeispielExample

interface ISampleInterface
{
    void SampleMethod();
}

class ImplementationClass : ISampleInterface
{
    // Explicit interface member implementation: 
    void ISampleInterface.SampleMethod()
    {
        // Method implementation.
    }

    static void Main()
    {
        // Declare an interface instance.
        ISampleInterface obj = new ImplementationClass();

        // Call the member.
        obj.SampleMethod();
    }
}

Eine Schnittstelle kann ein Member eines Namespaces oder einer Klasse sein.An interface can be a member of a namespace or a class. Eine Schnittstellendeklaration kann Deklarationen der folgenden Member enthalten (Signaturen ohne Implementierungen):An interface declaration can contain declarations (signatures without any implementation) of the following members:

Diese vorangehenden Memberdeklarationen enthalten in der Regel keinen Text.These preceding member declarations typically do not contain a body. Ab C# 8.0 kann ein Schnittstellenmember einen Text deklarieren.Beginning with C# 8.0, an interface member may declare a body. Dies wird als Standardimplementierung bezeichnet.This is called a default implementation. Member mit Text ermöglichen der Schnittstelle, eine „Standardimplementierung“ für Klassen und Strukturen bereitzustellen, die keine überschreibende Implementierung bereitstellen.Members with bodies permit the interface to provide a "default" implementation for classes and structs that don't provide an overriding implementation. Außerdem kann eine Schnittstelle ab C# 8.0 Folgendes umfassen:In addition, beginning with C# 8.0, an interface may include:

Schnittstellen dürfen keinen Instanzstatus enthalten.Interfaces may not contain instance state. Obwohl statische Felder jetzt zulässig sind, sind Instanzfelder in Schnittstellen nicht zulässig.While static fields are now permitted, instance fields are not permitted in interfaces. Automatische Eigenschaften von Instanzen werden in Schnittstellen nicht unterstützt, da sie implizit ein ausgeblendetes Feld deklarieren würden.Instance auto-properties are not supported in interfaces, as they would implicitly declare a hidden field. Diese Regel hat eine fast unmerkliche Auswirkung auf Eigenschaftsdeklarationen.This rule has a subtle effect on property declarations. In einer Schnittstellendeklaration deklariert der folgende Code anders als bei class und struct keine automatisch implementierte Eigenschaft.In an interface declaration, the following code does not declare an auto-implemented property as it does in a class or struct. Stattdessen wird eine Eigenschaft deklariert, die keine Standardimplementierung hat, sondern in jedem Typ implementiert werden muss, der die Schnittstelle implementiert:Instead, it declares a property that doesn't have a default implementation but must be implemented in any type that implements the interface:

public interface INamed
{
  public string Name {get; set;}
}

Eine Schnittstelle kann von einer oder mehreren Basisschnittstellen erben.An interface can inherit from one or more base interfaces. Wenn eine Schnittstelle eine Methode überschreibt die in einer Basisschnittstelle implementiert ist, muss sie die Syntax der expliziten Schnittstellenimplementierung verwenden.When an interface overrides a method implemented in a base interface, it must use the explicit interface implementation syntax.

Wenn eine Basistypliste sowohl eine Basisklasse als auch Schnittstellen umfasst, muss die Basisklasse zuerst in der Liste stehen.When a base type list contains a base class and interfaces, the base class must come first in the list.

Eine Klasse, die eine Schnittstelle implementiert, kann Member dieser Schnittstelle explizit implementieren.A class that implements an interface can explicitly implement members of that interface. Auf einen explizit implementierten Member kann nicht durch eine Klasseninstanz zugegriffen werden, sondern nur durch eine Schnittstelleninstanz.An explicitly implemented member cannot be accessed through a class instance, but only through an instance of the interface. Außerdem kann auf Standardschnittstellenmember nur über eine Instanz der Schnittstelle zugegriffen werden.In addition, default interface members can only be accessed through an instance of the interface.

Weitere Informationen zur expliziten Implementierung finden Sie unter Explizite Schnittstellenimplementierung.For more information about explicit interface implementation, see Explicit Interface Implementation.

BeispielExample

Das folgende Beispiel veranschaulicht die Schnittstellenimplementierung.The following example demonstrates interface implementation. In diesem Beispiel enthält die Schnittstelle die Eigenschaftendeklaration, und die Klasse enthält die Implementierung.In this example, the interface contains the property declaration and the class contains the implementation. Eine beliebige Instanz einer Klasse, die IPoint implementiert, hat die ganzzahligen Eigenschaften x und y.Any instance of a class that implements IPoint has integer properties x and y.

interface IPoint
{
   // Property signatures:
   int X
   {
      get;
      set;
   }

   int Y
   {
      get;
      set;
   }

   double Distance 
   {
       get;
   }
}

class Point : IPoint
{
   // Constructor:
   public Point(int x, int y)
   {
      X = x;
      Y = y;
   }

   // Property implementation:
   public int X { get; set; }

   public int Y { get; set; }

   // Property implementation
   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);
   }
}
// Output: My Point: x=2, y=3

C#-SprachspezifikationC# language specification

Weitere Informationen finden Sie im Abschnitt Schnittstellen der C# -Sprachspezifikation und in der Featurespezifikation für Standardschnittstellenmember – C# 8.0.For more information, see the Interfaces section of the C# language specification and the feature specification for Default interface members - C# 8.0

Siehe auchSee also