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ä.
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
- Määrittelemme ensin rajapinnan nimeltä "Guru99Interface.” Huomaa, että avainsanaa ”interface” käytetään rajapinnan määrittelemiseen.
- 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.
- 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:-
- Julistamme kaksi rajapintaa, IReadable ja IWritable. Jokainen rajapinta määrittelee yhden metodin ilman runkoa.
- Document-luokka listaa molemmat rajapinnat kaksoispisteen jälkeen pilkulla erotettuna, joten se suostuu huomioimaan molemmat rajoitukset.tracts.
- Luokka määrittelee sitten Read- ja Write-metodit.ping kumpi tahansa menetelmä aiheuttaisi käännösaikaisen virheen.
- 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ä.


