Was ist eine Schnittstelle in C# mit Beispiel

⚡ Intelligente Zusammenfassung

Eine Schnittstelle in C# definiert eine VerbindungtracDie Definition legt fest, welche Methoden und Eigenschaften eine Klasse implementieren muss, ohne den eigentlichen Code bereitzustellen. Die implementierende Klasse liefert das konkrete Verhalten und ermöglicht so lose Kopplung und Mehrfachvererbung über verschiedene, nicht verwandte Typen hinweg.

  • 🔗 Mittract: Ein Interface deklariert die Methoden- und Eigenschaftssignaturen, die jede implementierende Klasse definieren muss.
  • Keine Implementierung: Ein Interface enthält nur Deklarationen, daher schreibt die Klasse den eigentlichen Methodencode.
  • 🔑 Stichwort: Das Schlüsselwort `interface` erzeugt den Typ, und eine Klasse verwendet einen Doppelpunkt, um ihn zu implementieren.
  • 🔀 Mehrere Schnittstellen: Eine Klasse kann mehrere Schnittstellen implementieren, wodurch C# eine Form der Mehrfachvererbung erhält.
  • Schnittstelle vs. Abstract-Klasse: Schnittstellen definieren lediglich das Verhalten, während absolute Schnittstellentract-Klassen können auch gemeinsam genutzten Zustand und Code enthalten.
  • 🤖 KI-Unterstützung: GitHub Copilot erstellt Schnittstellen und Implementierungen, und ML.NET-Pipelines basieren auf schnittstellenbasierten Transformer-Containern.tracts.

Schnittstelle in C#

Was ist Schnittstelle in C#?

An Interface in C# wird zusammen mit einer Klasse verwendet, um eine Konfiguration zu definieren.tracDie Schnittstelle ist eine Vereinbarung darüber, welche Funktionen eine Klasse einer Anwendung bereitstellt. Sie definiert, welche Operationen eine Klasse ausführen kann. Eine Schnittstelle deklariert die Eigenschaften und Methoden. Es obliegt der Klasse selbst, die genaue Funktionsweise der einzelnen Methoden festzulegen.

Schauen wir uns ein Beispiel einer Schnittstelle an, indem wir die Klassen in unserer Konsolenanwendung ändern. Beachten Sie, dass wir den Code nicht ausführen, da nichts über eine Schnittstelle ausgeführt werden kann.

Beispiel für eine C#-Schnittstelle

Lasst uns eine Schnittstellenklasse erstellen. Die Klasse wird „Guru99Interface." Unsere Hauptklasse wird dann die definierte Schnittstelle erweitern. Der gesamte Code muss in der Datei Program.cs geschrieben werden.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 interface IGuru99Interface
 {
  void SetTutorial(int pID, string pName);
  String GetTutorial();
 }

 class Guru99Tutorial : IGuru99Interface
 {
  protected int TutorialID;
  protected string TutorialName;

  public void SetTutorial(int pID, string pName)
  {
   TutorialID = pID;
   TutorialName = pName;
  }

  public String GetTutorial()
  {
   return TutorialName;
  }

  static void Main(string[] args)
  {
   Guru99Tutorial pTutor = new Guru99Tutorial();

   pTutor.SetTutorial(1,".Net by Guru99");

   Console.WriteLine(pTutor.GetTutorial());

   Console.ReadKey();
  }
 }
}

Code Erläuterung:-

Hier erklären wir die wichtigen Abschnitte des Codes

Beispiel für eine C#-Schnittstelle

  1. Zuerst definieren wir eine Schnittstelle namens „Guru99Schnittstelle.“ Beachten Sie, dass das Schlüsselwort „Schnittstelle“ verwendet wird, um eine Schnittstelle zu definieren.
  2. Als nächstes definieren wir die Methoden, die von unserer Schnittstelle verwendet werden. In diesem Fall definieren wir dieselben Methoden, die in allen vorherigen Beispielen verwendet wurden. Beachten Sie, dass eine Schnittstelle nur die Methoden deklariert. Sie definiert nicht den darin enthaltenen Code.
  3. Dann machen wir unsere GuruDie Klasse 99Tutorial erweitert das Interface. Hier schreiben wir den Code, der die verschiedenen im Interface deklarierten Methoden definiert. Diese Art der Codierung bewirkt Folgendes:
    • Es stellt sicher, dass die Klasse, Guru99Tutorial fügt lediglich den Code hinzu, der für die Methoden „SetTutorial“ und „GetTutorial“ notwendig ist, und sonst nichts.
    • Es stellt außerdem sicher, dass sich die Schnittstelle wie eine Verbindung verhält.tracT. Der Klasse muss sich an die Regeln haltentract. Wenn also die KontracWenn es heißt, dass es zwei Methoden namens „SetTutorial“ und „GetTutorial“ haben sollte, dann sollte es auch so sein.

C#-Schnittstelle vs. Abstract-Klasse

Eine häufige Frage für Anfänger ist, wie sich eine C#-Schnittstelle von einer anderen unterscheidet. abstracT-KlasseBeide definieren eine Konjunktion.tracEs gibt zwar weitere Typen, die dem folgen, aber dennoch anderen Gestaltungszielen dienen.

Die wichtigsten Unterschiede sind im Folgenden aufgeführt:

  • Implementierung: Eine Schnittstelle enthält nur Deklarationen, während ein absolutestracDie t-Klasse kann beides liefern: abstract-Mitglieder und vollständig implementierte Methoden.
  • Mehrfachvererbung: Eine Klasse kann viele Schnittstellen implementieren, aber nur eine absolute Schnittstelle erben.tract-Klasse.
  • Bundesland/ Kanton: Ein SixpacktracEine Klasse kann Felder, Konstruktoren und Eigenschaften mit Daten enthalten, wohingegen eine Schnittstelle keinen Instanzzustand speichern kann.
  • Zugriffsmodifikatoren: AbstracDie Member der Klasse t können public, protected oder private sein, während die Member der klassischen Schnittstelle implizit public sind.
  • Anwendungsfall: Verwenden Sie eine Schnittstelle, um eine Funktionalität über verschiedene, nicht verwandte Typen hinweg hinzuzufügen, und eine absolutetract-Klasse, um gemeinsamen Code zwischen eng verwandten Typen zu teilen.

Kurz gesagt, eine Schnittstelle beschreibt, was eine Klasse tun kann, während ein absolutes Interface (abs)tracDie Klasse t kann auch einen Teil der Vorgehensweise definieren.

Wie man mehrere Schnittstellen in C# implementiert

Anders als bei der Klassenvererbung erlaubt C# einer einzelnen Klasse, mehrere Schnittstellen zu implementieren. Dadurch bietet die Sprache eine sichere Form der Mehrfachvererbung ohne die Mehrdeutigkeit, die durch die gleichzeitige Vererbung mehrerer Basisklassen entsteht.

Um mehrere Schnittstellen zu implementieren, listen Sie diese nach dem Klassennamen auf und trennen Sie sie durch Kommas. Die Klasse muss anschließend jede in den implementierten Schnittstellen deklarierte Methode definieren.

Schritt 1) Deklarieren Sie zwei Schnittstellen, jede mit ihrer eigenen Methode.

Schritt 2) Erstellen Sie eine Klasse, die beide Schnittstellen implementiert, wobei die Schnittstellennamen durch ein Komma getrennt werden.

Schritt 3) Stellen Sie für jedes in den Schnittstellen deklarierte Element einen Methodenrumpf bereit.

Das folgende Beispiel zeigt eine Document-Klasse, die sowohl ein I implementiert.Readable und eine IWritable-Schnittstelle.

using System;
namespace DemoApplication
{
 interface IReadable
 {
  void Read();
 }
 interface IWritable
 {
  void Write();
 }
 class Document : IReadable, IWritable
 {
  public void Read()
  {
   Console.WriteLine("Reading the document");
  }
  public void Write()
  {
   Console.WriteLine("Writing to the document");
  }
  static void Main(string[] args)
  {
   Document doc = new Document();
   doc.Read();
   doc.Write();
   Console.ReadKey();
  }
 }
}

Code Erläuterung:-

  1. Wir deklarieren zwei Schnittstellen, IReadable und IWritable. Jede Schnittstelle deklariert eine einzelne Methode ohne Methodenrumpf.
  2. Die Document-Klasse listet beide Schnittstellen nach dem Doppelpunkt, durch ein Komma getrennt, auf und berücksichtigt somit beide Konventionen.tracts.
  3. Die Klasse definiert anschließend die Methoden „Lesen“ und „Schreiben“. Überspringenping Beide Methoden würden einen Kompilierfehler verursachen.
  4. Die Main-Methode erzeugt ein Document-Objekt und ruft beide Methoden auf, wodurch bewiesen wird, dass die Klasse die beiden Schnittstellen erfüllt.

Wenn das Programm ausgeführt wird, gibt es Folgendes aus: Das Dokument lesen in der ersten Zeile und Schreiben an das Dokument in der zweiten Zeile. Dieses Muster hält jedes Con aufrecht.tract klein und fokussiert, was die Document-Klasse einfacher zu testen und zu erweitern macht.

Vorteile der Verwendung von Schnittstellen in C#

Schnittstellen werden in professionellen C#-Projekten häufig eingesetzt, da sie den Code flexibel und wartungsfreundlicher machen. Sie ermöglichen es, gegen eine bestimmte Sprache zu programmieren.tract statt einer konkreten Klasse.

Die Hauptvorteile sind:

  • Lose Kopplung: Code Es hängt von der Schnittstelle ab, nicht von einer bestimmten Klasse, daher kann sich eine Implementierung ändern, ohne dass die Aufrufer beeinträchtigt werden.
  • Mehrfachvererbung: Eine Klasse kann Verhalten von mehreren Schnittstellen erben, was bei einfacher Klassenvererbung nicht möglich ist.
  • Testbarkeit: Schnittstellen erleichtern es, während Unit-Tests eine reale Klasse durch ein Mock-Objekt zu ersetzen.
  • Abhängigkeitsspritze: Frameworks injizieren eine Schnittstellenimplementierung zur Laufzeit, eine Kernidee der SOLID-Prinzipien.
  • Konsistenz: Jede implementierende Klasse ist gezwungen, die gleichen Member bereitzustellen, was die Vorhersagbarkeit der API gewährleistet.

Aufgrund dieser Vorteile bilden Schnittstellen den Kern der meisten modernen C#-Designmuster und Anwendungsframeworks.

Häufig gestellte Fragen

Konventionsgemäß beginnt ein C#-Schnittstellenname mit einem großen I, z. B. IDisposable oder IReadableDas Präfix I signalisiert sofort, dass es sich bei dem Typ um eine Schnittstelle und nicht um eine Klasse oder Struktur handelt.

Vor C# 8.0 enthielt eine Schnittstelle nur Deklarationen. Ab C# 8.0 ermöglichen Standardmethoden in Schnittstellen die Bereitstellung eines Methodenrumpfs, sodass ältere Implementierungen auch bei Hinzufügung neuer Member weiterhin funktionieren.

Eine explizite Implementierung benennt ein Mitglied mit seinem Schnittstellenpräfix, z. B. IReadable.Read. Das Element ist dann nur über eine Schnittstellenreferenz aufrufbar, wodurch Namenskonflikte vermieden werden, wenn zwei Schnittstellen dieselbe Methode deklarieren.

Ja. Ein Interface kann ein oder mehrere andere Interfaces erben. Eine Klasse, die das Kind-Interface implementiert, muss dann alle Methoden sowohl des Kind-Interfaces als auch aller geerbten Eltern-Interfaces definieren.

Nein. Eine Schnittstelle kann nicht direkt instanziiert werden, da sie keine Implementierung besitzt. Man erstellt ein Objekt einer Klasse, die die Schnittstelle implementiert, und referenziert dieses Objekt dann über den Schnittstellentyp.

Ja. Die Elemente einer klassischen Schnittstelle sind implizit öffentlich, und es können keine Zugriffsmodifizierer hinzugefügt werden. Die implementierende Klasse muss die entsprechenden Elemente ebenfalls als öffentlich deklarieren.

Ja. GitHub Copilot kann anhand eines kurzen Kommentars oder des Schnittstellennamens ein Interface erstellen, Methodensignaturen vorschlagen und eine Klasse generieren, die es implementiert. Dies beschleunigt die Entwicklung.tract-erste Entwicklung.

ML.NET verwendet Schnittstellen wie ITransformer und IDataView, um seine Machine-Learning-Pipeline zu definieren. Die Codierung gegen diese Schnittstellen ist mitunter schwierig.tracMit ts können Sie Modelle und Datenquellen austauschen, ohne den umgebenden Trainingscode neu schreiben zu müssen.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: