Wat is Interface in C# met voorbeeld

โšก Slimme samenvatting

Een interface in C# definieert een verbindingtracEen implementatie die aangeeft welke methoden en eigenschappen een klasse moet implementeren, zonder de daadwerkelijke code te leveren. De implementerende klasse levert het concrete gedrag, waardoor losse koppeling en meervoudige overerving tussen verschillende typen mogelijk is.

  • ๐Ÿ”— mettract: Een interface definieert de methode- en eigenschapssignaturen die elke implementerende klasse moet definiรซren.
  • โœ… Geen implementatie: Een interface bevat alleen declaraties, dus de klasse schrijft de daadwerkelijke methodecode.
  • ๐Ÿ”‘ trefwoord: Het sleutelwoord `interface` definieert het type, en een klasse gebruikt een dubbele punt om het te implementeren.
  • ๐Ÿ”€ Meerdere interfaces: Eรฉn klasse kan meerdere interfaces implementeren, waardoor C# een vorm van meervoudige overerving biedt.
  • โš– Interface versus abstract-klasse: Interfaces definiรซren alleen gedrag, terwijl abstract-klassen kunnen ook gedeelde status en code bevatten.
  • ๐Ÿค– AI-assistentie: GitHub Copilot genereert interfaces en implementaties, en ML.NET-pipelines vertrouwen op interface-gebaseerde transformer-configuraties.tracts.

Interface in C#

Wat is interface in C#?

An Interface In C# wordt het samen met een klasse gebruikt om een โ€‹โ€‹context te definiรซren.tracEen interface is een overeenkomst over wat de klasse aan een applicatie zal leveren. De interface definieert welke bewerkingen een klasse kan uitvoeren. Een interface declareert de eigenschappen en methoden. Het is aan de klasse om precies te definiรซren wat de methode zal doen.

Laten we een voorbeeld bekijken van een interface door de klassen in onze Console-applicatie te wijzigen. Houd er rekening mee dat we de code niet zullen uitvoeren, omdat er niets is dat via een interface kan worden uitgevoerd.

C#-interfacevoorbeeld

Laten we een interfaceklasse maken. De klasse zal de naam "Guru99Interface.โ€ Onze hoofdklasse zal vervolgens de gedefinieerde interface uitbreiden. Alle code moet in het bestand Program.cs worden geschreven.

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 Uitleg:-

Hier leggen we de belangrijke delen van de code uit

C#-interfacevoorbeeld

  1. We definiรซren eerst een interface genaamd "Guru99Interface.โ€ Merk op dat het sleutelwoord โ€œinterfaceโ€ wordt gebruikt om een โ€‹โ€‹interface te definiรซren.
  2. Vervolgens definiรซren we de methoden die door onze interface worden gebruikt. In dit geval definiรซren we dezelfde methoden die in alle eerdere voorbeelden worden gebruikt. Let op: een interface declareert alleen de methoden. Het definieert niet de code erin.
  3. Vervolgens maken we onze GuruDe 99Tutorial-klasse breidt de interface uit. Hier schrijven we de code die de verschillende methoden definieert die in de interface zijn gedeclareerd. Dit soort code bereikt het volgende:
    • Het zorgt ervoor dat de klas, Guru99Tutorial voegt alleen de code toe die nodig is voor de methoden "SetTutorial" en "GetTutorial" en verder niets.
    • Het zorgt er ook voor dat de interface zich gedraagt โ€‹โ€‹als een contract. De klasse moet zich aan de overeenkomst houdentract. Dus als de contracAls er staat dat er twee methoden moeten zijn, genaamd "SetTutorial" en "GetTutorial", dan is dat precies zoals het hoort.

C# Interface versus Abstract Klasse

Een veelgestelde vraag van beginners is hoe een C#-interface verschilt van een abstract-klasseBeide definiรซren een contracdat andere typen volgen, maar dat ze verschillende ontwerpdoelen dienen.

De belangrijkste verschillen staan โ€‹โ€‹hieronder vermeld:

  • Implementatie: Een interface bevat alleen declaraties, terwijl een interface abstracDe T-klasse kan zowel buikspieren als andere buikspieren bieden.tract leden en volledig geรฏmplementeerde methoden.
  • Meerdere overerving: Een klasse kan veel interfaces implementeren, maar kan er slechts รฉรฉn overerven.tract-klasse.
  • Staat: Een buiktracEen klasse kan velden, constructors en eigenschappen met data bevatten, terwijl een interface geen instantie-status kan opslaan.
  • Toegangsmodifiers: AbstracLeden van een t-klasse kunnen openbaar, beveiligd of privรฉ zijn, terwijl leden van een klassieke interface impliciet openbaar zijn.
  • Use case: Gebruik een interface om een โ€‹โ€‹functionaliteit toe te voegen aan verschillende typen, en een abstract-klasse om gemeenschappelijke code te delen tussen nauw verwante typen.

Kort gezegd beschrijft een interface wat een klasse kan doen, terwijl een abstractielaag (abs) dat niet kan.tracDe klasse t kan ook een deel van de werkwijze definiรซren.

Hoe implementeer je meerdere interfaces in C#?

In tegenstelling tot klasse-overerving, staat C# toe dat รฉรฉn klasse meer dan รฉรฉn interface implementeert. Op deze manier biedt de taal een veilige vorm van meervoudige overerving zonder de ambiguรฏteit die ontstaat bij het tegelijkertijd overerven van meerdere basisklassen.

Om meerdere interfaces te implementeren, vermeldt u deze na de klassenaam en scheidt u ze met een komma. De klasse moet vervolgens elke methode definiรซren die is gedeclareerd in elke interface die zij implementeert.

Stap 1) Declareer twee interfaces, elk met een eigen methode.

Stap 2) Maak een klasse die beide interfaces implementeert, waarbij je de interfacenamen scheidt met een komma.

Stap 3) Geef voor elk lid dat in elke interface is gedeclareerd een methodebody op.

Het onderstaande voorbeeld toont een Document-klasse die zowel een I implementeertReadable en een IWritable-interface.

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 Uitleg:-

  1. We declareren twee interfaces, IReadable en IWritable. Elke interface declareert een enkele methode zonder body.
  2. De klasse Document vermeldt beide interfaces na de dubbele punt, gescheiden door een komma, en stemt er dus mee in om beide interfaces te respecteren.tracts.
  3. De klasse definieert vervolgens de methoden Read en Write. Overslaanping Beide methoden zouden een compileerfout veroorzaken.
  4. De Main-methode maakt een Document-object aan en roept beide methoden aan, waarmee bewezen wordt dat de klasse aan beide interfaces voldoet.

Wanneer het programma wordt uitgevoerd, print het het volgende af. Het document lezen op de eerste regel en Schrijven naar het document op de tweede regel. Dit patroon zorgt ervoor dat elke contracHet is klein en gefocust, waardoor de Document-klasse gemakkelijker te testen en uit te breiden is.

Voordelen van het gebruik van interfaces in C#

Interfaces worden veel gebruikt in professionele C#-projecten omdat ze de code flexibeler en gemakkelijker te onderhouden maken. Ze stellen je in staat om te programmeren met een interface die...tract in plaats van naar een concrete klasse.

De belangrijkste voordelen zijn:

  • Losse koppeling: Code Het hangt af van de interface, niet van een specifieke klasse, dus een implementatie kan veranderen zonder dat dit problemen veroorzaakt voor de aanroepende programma's.
  • Meerdere overerving: Een klasse kan gedrag overerven van meerdere interfaces, iets wat bij gewone klasse-overerving niet mogelijk is.
  • Testbaarheid: Interfaces maken het eenvoudig om tijdens unit-testen een echte klasse te vervangen door een mock-object.
  • Afhankelijkheidsinjectie: Frameworks injecteren een interface-implementatie tijdens de uitvoering, een kernidee achter de SOLID-principes.
  • Consistentie: Elke implementerende klasse is gedwongen dezelfde set leden te leveren, wat de API voorspelbaar houdt.

Vanwege deze voordelen vormen interfaces de kern van de meeste moderne C#-ontwerppatronen en applicatie-frameworks.

Veelgestelde vragen

Volgens de conventie begint een C#-interfacenaam met een hoofdletter I, zoals IDisposable of IReadableHet voorvoegsel 'I' geeft direct aan dat het type een interface is en geen klasse of structuur.

Vรณรณr C# 8.0 bevatte een interface alleen declaraties. Vanaf C# 8.0 kunnen standaard interfacemethoden een methodebody leveren, waardoor oudere implementaties blijven werken wanneer nieuwe leden worden toegevoegd.

Een expliciete implementatie benoemt een lid met het voorvoegsel van de interface, zoals I.Readable.Lezen. Het lid is dan alleen aanroepbaar via een interfacereferentie, wat naamconflicten voorkomt wanneer twee interfaces dezelfde methode declareren.

Ja. Een interface kan รฉรฉn of meer andere interfaces overerven. Een klasse die de afgeleide interface implementeert, moet dan elke methode definiรซren van zowel de afgeleide interface als alle overgeรซrfde interfaces van de bovenliggende interface.

Nee. Een interface kan niet rechtstreeks worden geรฏnstantieerd omdat deze geen implementatie heeft. Je maakt een object van een klasse die de interface implementeert, en vervolgens verwijs je naar dat object via het interfacetype.

Ja. Leden van een klassieke interface zijn impliciet openbaar en je kunt er geen toegangsmodifiers aan toevoegen. De implementerende klasse moet de overeenkomende leden ook als openbaar declareren.

Ja. GitHub Copilot kan een interface genereren, de methodesignaturen ervan voorstellen en een klasse genereren die deze implementeert op basis van een korte opmerking of de interfacenaam, wat het schrijfproces versnelt.tract-eerste ontwikkeling.

ML.NET vertrouwt op interfaces zoals ITransformer en IDataView om de machine learning-pipeline te definiรซren. Programmeren met deze interfaces is complex.tracMet ts kun je modellen en gegevensbronnen wisselen zonder de omliggende trainingscode te hoeven herschrijven.

Vat dit bericht samen met: