Mikä on C#:n käyttöliittymä esimerkin kanssa

⚡ Älykäs yhteenveto

C#-kielen rajapinta määrittelee conintract, joka määrittää, mitkä metodit ja ominaisuudet luokan on toteutettava, mutta ei tarjoa varsinaista koodia. Toteuttava luokka tarjoaa konkreettisen käyttäytymisen, mikä mahdollistaa löyhän kytkennän ja moninkertaisen periytymisen toisiinsa liittymättömien tyyppien välillä.

  • 🔗 kanssatract: Rajapinta määrittelee metodin ja ominaisuusallekirjoitukset, jotka jokaisen toteuttavan luokan on määriteltävä.
  • Ei toteutusta: Rajapinta sisältää vain deklaraatioita, joten luokka kirjoittaa varsinaisen metodikoodin.
  • 🔑 Avainsana: Avainsana interface luo tyypin, ja luokka toteuttaa sen kaksoispisteellä.
  • 🔀 Useita käyttöliittymiä: Yksi luokka voi toteuttaa useita rajapintoja, mikä antaa C#:lle eräänlaisen moniperinnän.
  • Käyttöliittymä vs. vatsalihaksettract-luokka: Rajapinnat määrittelevät vain käyttäytymisen, kun taas abstract-luokat voivat myös sisältää jaettua tilaa ja koodia.
  • 🤖 AI-apu: GitHub Copilot tukee rajapintoja ja toteutuksia, ja ML.NET-putket perustuvat rajapintapohjaisiin muunto-ohjelmointiprosesseihin.tracts.

C#-käyttöliittymä

Mikä on C#:n käyttöliittymä?

An liitäntä C#:ssa käytetään yhdessä luokan kanssa conin määrittelyyntract, joka on sopimus siitä, mitä luokka tarjoaa sovellukselle. Rajapinta määrittelee, mitä toimintoja luokka voi suorittaa. Rajapinta määrittelee ominaisuudet ja metodit. Luokan tehtävänä on määritellä tarkalleen, mitä metodi tekee.

Katsotaanpa esimerkkiä käyttöliittymästä muuttamalla luokat konsolisovelluksessamme. Huomaa, että emme käytä koodia, koska mitään ei voida suorittaa käyttöliittymän avulla.

Esimerkki C#-liittymästä

Luodaan rajapintaluokka. Luokkaa kutsutaan nimellä ”Guru99Interface.” Pääluokkamme laajentaa sitten määriteltyä rajapintaa. Kaikki koodi on kirjoitettava Program.cs-tiedostoon.

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

Tässä selitämme koodin tärkeät osat

Esimerkki C#-liittymästä

  1. Määrittelemme ensin rajapinnan nimeltä "Guru99Interface.” Huomaa, että avainsanaa ”interface” käytetään rajapinnan määrittelemiseen.
  2. Seuraavaksi määrittelemme menetelmät, joita käyttöliittymämme käyttää. Tässä tapauksessa määrittelemme samat menetelmät, joita käytetään kaikissa aikaisemmissa esimerkeissä. Huomaa, että käyttöliittymä vain ilmoittaa menetelmät. Se ei määrittele niissä olevaa koodia.
  3. Sitten teemme omamme Guru99Tutorial-luokka laajentaa rajapintaa. Tähän kirjoitetaan koodi, joka määrittelee rajapinnassa esitellyt eri metodit. Tämän tyyppinen koodaus saavuttaa seuraavat tulokset:
    • Se varmistaa, että luokka, Guru99Tutorial lisää vain koodin, joka on välttämätön "SetTutorial"- ja "GetTutorial"-metodeille, eikä mitään muuta.
    • Se varmistaa myös, että käyttöliittymä toimii kuin huijaus.tract. luokka on noudatettava coniatract. Joten jos huijaustracJos t sanoo, että siinä pitäisi olla kaksi metodia nimeltä ”SetTutorial” ja ”GetTutorial”, niin sen pitäisi olla niin.

C#-käyttöliittymä vs. abstract-luokka

Yleinen kysymys aloittelijoille on, miten C#-rajapinta eroaa... abstract-luokkaMolemmat määrittelevät huijauksentract että muut tyypit seuraavat, mutta ne palvelevat erilaisia ​​suunnittelutavoitteita.

Keskeiset erot on lueteltu alla:

  • toteutus: Rajapinta sisältää vain deklaraatioita, kun taas abstracT-tunti voi tarjota sekä vatsalihaksiatract-jäsenet ja täysin toteutetut menetelmät.
  • Moninkertainen perintö: Luokka voi toteuttaa useita rajapintoja, mutta periä vain yhden rajapinnantract-luokka.
  • State: Vatsalihaksettract-luokka voi sisältää kenttiä, konstruktoreita ja ominaisuuksia datan kera, kun taas rajapinta ei voi tallentaa instanssin tilaa.
  • Käyttöoikeusmuokkaajat: Abstract-luokan jäsenet voivat olla julkisia, suojattuja tai yksityisiä, kun taas klassisen käyttöliittymän jäsenet ovat implisiittisesti julkisia.
  • Käyttötapa: Käytä käyttöliittymää lisätäksesi ominaisuuden toisiinsa liittymättömien tyyppien välillä ja abs-funktiontract-luokka jakaa yhteistä koodia läheisesti toisiinsa liittyvien tyyppien kesken.

Lyhyesti sanottuna rajapinta kuvaa, mitä luokka voi tehdä, kun taas abs-rajapintatract-luokka voi myös määritellä osan siitä, miten se tehdään.

Kuinka toteuttaa useita rajapintoja C#:lla

Toisin kuin luokkien periytyminen, C# sallii yhden luokan toteuttaa useamman kuin yhden rajapinnan. Tällä tavoin kieli tarjoaa turvallisen muodon moninkertaiseen periytymiseen ilman useiden perusluokkien samanaikaisesta periytymisestä johtuvaa monitulkintaisuutta.

Useiden rajapintojen toteuttamiseksi listaa ne luokan nimen jälkeen ja erota ne pilkulla. Luokan on sitten määriteltävä jokainen metodi, joka on ilmoitettu jokaisessa toteuttamassaan rajapinnassa.

Vaihe 1) Määrittele kaksi rajapintaa, joilla kummallakin on oma metodinsa.

Vaihe 2) Luo luokka, joka toteuttaa molemmat rajapinnat erottamalla rajapintojen nimet pilkulla.

Vaihe 3) Anna metodirunko jokaiselle rajapinnassa ilmoitetulle jäsenelle.

Alla oleva esimerkki näyttää Document-luokan, joka toteuttaa sekä I- että I-luokan.Readable ja IWritable-käyttöliittymä.

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

  1. Julistamme kaksi rajapintaa, IReadable ja IWritable. Jokainen rajapinta määrittelee yhden metodin ilman runkoa.
  2. Document-luokka listaa molemmat rajapinnat kaksoispisteen jälkeen pilkulla erotettuna, joten se suostuu huomioimaan molemmat rajoitukset.tracts.
  3. Luokka määrittelee sitten Read- ja Write-metodit.ping kumpi tahansa menetelmä aiheuttaisi käännösaikaisen virheen.
  4. Main-metodi luo Document-objektin ja kutsuu molempia metodeja todistaen, että luokka täyttää molemmat rajapinnat.

Kun ohjelma suoritetaan, se tulostaa Asiakirjan lukeminen ensimmäisellä rivillä ja Dokumenttiin kirjoittaminen toisella rivillä. Tämä kaava pitää jokaisen conintracpieni ja fokusoitu, mikä helpottaa Document-luokan testaamista ja laajentamista.

C#:n rajapintojen käytön edut

Rajapintoja käytetään laajalti ammattimaisissa C#-projekteissa, koska ne tekevät koodista joustavaa ja helpommin ylläpidettävää. Niiden avulla voit ohjelmoida umpikujaan.tract pikemminkin kuin konkreettiseen luokkaan.

Tärkeimpiä etuja ovat:

  • Löysä kytkentä: Code riippuu rajapinnasta, ei tietystä luokasta, joten toteutus voi muuttua rikkomatta kutsujia.
  • Moninkertainen perintö: Luokka voi periä käyttäytymisen useilta rajapinnoilta, mitä tavallinen luokan periytyminen ei salli.
  • Testattavuus: Rajapinnat tekevät oikean luokan vaihtamisesta malliobjektiin yksikkötestauksen aikana yksinkertaiseksi.
  • Riippuvuuspistos: Kehykset lisäävät rajapinnan toteutuksen suorituksen aikana, mikä on SOLID-periaatteiden ydinajatus.
  • Johdonmukaisuus: Jokainen toteuttava luokka on pakotettu tarjoamaan sama joukko jäseniä, mikä pitää API:n ennustettavana.

Näiden etujen vuoksi käyttöliittymät ovat useimpien nykyaikaisten C#-suunnittelumallien ja sovelluskehysten ytimessä.

UKK

Sopimuksen mukaan C#-rajapinnan nimi alkaa isolla I-kirjaimella, kuten IDisposable tai IReadableI-etuliite osoittaa välittömästi, että tyyppi on rajapinta eikä luokka tai rakenne.

Ennen C# 8.0:aa rajapinnassa oli vain deklaraatioita. C# 8.0:sta eteenpäin rajapinnan oletusmetodit antoivat rajapinnan tarjota metodin rungon, joten vanhemmat toteutukset toimivat edelleen, kun uusia jäseniä lisätään.

Eksplisiittinen toteutus nimeää jäsenen sen rajapinnan etuliitteellä, kuten IReadable.Luettu. Jäsentä voi sitten kutsua vain rajapintaviittauksen kautta, mikä estää nimien yhteentörmäykset, kun kaksi rajapintaa määrittää saman metodin.

Kyllä. Rajapinta voi periä yhden tai useamman muun rajapinnan. Lapsirajapinnan toteuttavan luokan on sitten määriteltävä kaikki metodit sekä lapsirajapinnasta että kaikista perityistä vanhemmista rajapinnoista.

Ei. Rajapintaa ei voida instansoida suoraan, koska sillä ei ole toteutusta. Luot luokan objektin, joka toteuttaa rajapinnan, ja viittaat sitten kyseiseen objektiin rajapinnan tyypin kautta.

Kyllä. Klassisen rajapinnan jäsenet ovat implisiittisesti julkisia, etkä voi lisätä niihin käyttöoikeusmääreitä. Toteuttavan luokan on myös ilmoitettava vastaavat jäsenet julkisiksi.

Kyllä. GitHub Copilot voi scaffolding-periaatteella luoda rajapinnan, ehdottaa sen metodien allekirjoituksia ja luoda luokan, joka toteuttaa sen lyhyen kommentin tai rajapinnan nimen perusteella, mikä nopeuttaa konstruktiota.tract-first-kehitys.

ML.NET käyttää rajapintoja, kuten ITransformer ja IDataView, koneoppimisputkensa määrittelyssä. Näitä rajapintoja vasten koodaaminentracts:n avulla voit vaihtaa malleja ja tietolähteitä kirjoittamatta ympäröivää harjoituskoodia uudelleen.

Tiivistä tämä viesti seuraavasti: