Skip to content
Menu
Leesweb
Leesweb

Lektion 14-gränssnitt i VB.NET

Posted on januari 4, 2022 by admin

i föregående övning, lösta uppgifter för OOP i VB.Net lektioner 12-13, har vi övat vår kunskap från tidigare lektioner.

i föregående lektion, lösta uppgifter för OOP i VB. Net lektioner 12-13, övade vi att arbeta med Listcollections och skapade en elektronisk dagbok i Visual Basic .NET. i dagens tutorial kommer vi att komma tillbaka till några mer teoretiska frågor. Vi ska avslöja ännu ett nytt verktyg för den objektorienterade programmeringsvärlden!

gränssnitt

när man hänvisar till ett objekts gränssnitt, hänvisar de till hur ett objekt är synligt från utsidan. Vi vet redan att ett objekt innehåller metodersom kan ställas in som privat eller offentligt. Objektets gränssnitt består av dessoffentliga metoder, vilket är hur vi kommunicerar med vissa typer av objekt.Vi har redan behandlat offentliga metoder i tidigare lektioner, t.ex. de som vi satt upp för vår arenakrigare. Krigarklassen vi gjorde hade följande publicmethods:

  • Sub Attack(fiende som krigare)
  • Sub försvara(hit som heltal)
  • funktion levande() som Booleska
  • Sub SetMessage(meddelande som sträng)
  • funktion GetLastMessage() som sträng
  • funktion HealthBar() som sträng

om vi lagrar en warrior class-instans i en variabel kan vi ringa Theattack() eller försvara() metoder på den. Inget nytt, eller hur?

faktum är att vi kan förklara ett gränssnitt separat, som vi gör med klasser, och vi skulle då kunna använda det som en datatyp.

vi ger det en chans, men på en enklare klass än Warrior-klassen vi gjorde.Vi börjar med att skapa ett nytt projekt, ett konsolprogram, namnge detinterfacesample och lägga till en enkel klass. Enligt min mening teoretiskbegrepp bör förklaras med hjälp av lätta exempel, vilket inte betyder lika allvarligt. Med allt sagt, låt oss göra en fågelklass! Vår fågel kommer att kunna kvittra,Andas och pecka. Vår Fågelklass kommer att se ut somdetta:

Public Class Bird Public Sub Chirp() Console.WriteLine("♫ ♫ ♫") End Sub Public Sub Breathe() Console.WriteLine("Breathing...") End Sub Public Sub Peck() Console.WriteLine("Peck, peck!") End SubEnd Class

klart! Nu, låt oss flytta till Module1.vb och skapa en fågelinstans:

Dim bird As Bird = New Bird()

när du har skapat en instans av fågelklassen, skriv vad du än kalladeinstansen, i mitt fall är det ”fågel” och Lägg till en punkt direkt efter det. VisualStudio visar sedan alla sina klassmetoder (du kan också invokeIntelliSense genom att trycka på Ctrl + Space):

vi ser nu allt som vi kan kalla på fågelinstansen. De 3 metoderna som vi just nu implementerat finns där liksom några andra som alla objekt har från sin bas.

låt oss nu skapa ett gränssnitt för vår fågel. Vi använder nyckelordet interface för att göra just det. I VB.NET, Det är en brapraxis att prefixa gränssnittet med” I ” (som i gränssnittet). Högerklicka på projektet och välj Lägg till nytt objekt- > gränssnitt.

ett tomt gränssnitt läggs till i vårt projekt. Vi lägger tillheaders av metoder som detta gränssnitt kommer att kräva. Theimplementation själv, metodinnehåll, läggs till senare av klassen som implementerar gränssnittet.

Låt oss lägga till metodhuvuden till IBird-gränssnittet, vi kommer avsiktligt att utelämna en av dem och bara lägga till kvittring och andning:

Public Interface IBird Sub Chirp() Sub Breathe()End Interface

vi anger inte den offentliga modifieraren eftersom ett gränssnitt endast innehåller publicmethods. Det skulle inte vara meningsfullt annars eftersom det anger hur man arbetar med ett objekt från utsidan.

Låt oss gå tillbaka till Module1.vb och ändra linjen med fågelvariabeln så att den inte kommer att vara längre av Fågeltypen, utan av fågeltypen:

Dim bird As IBird = New Bird()

vad koden ovan betyder är att i fågelvariabeln förväntar vi oss ett objektsom innehåller de metoder som anges i iBird-gränssnittet. Visual Studioreports ett fel eftersom Bird-klassen inte implementerar iBird-gränssnittet ännu.Även om det har de nödvändiga metoderna måste det först informeras om att detgenomför detta gränssnitt. Låt oss flytta till Fågelklassen och låt den implementera thebirdgränssnittet. Vi gör det på samma sätt som när vi vill att en klass ska ärva från en annan, vi använder bara nyckelordet redskap för det:

Public Class Bird Implements IBird . . .

vi måste också ange vilka metoder från klassen som implementerar vilken metodfrån gränssnittet / gränssnitten. Vi använder nyckelordet redskap för det också, den här gången efter metoddefinitionerna. Fågelklassen kommer nu att se utdetta:

Public Class Bird Implements IBird Public Sub Chirp() Implements IBird.Chirp Console.WriteLine("♫ ♫ ♫") End Sub Public Sub Breathe() Implements IBird.Breathe Console.WriteLine("Breathing...") End Sub Public Sub Peck() Console.WriteLine("Peck, peck!") End SubEnd Class

när vi går tillbaka till Module1.vb, linjen med variabeln för IBird-typenorsakar inte längre ett fel. Fågelklassen implementerar Ibirdgränssnittet korrekt. Det betyder att Fågelinstanser nu kan lagras i Variabler av dettatyp.

nu bara för fullständighetens skull, låt oss se vad som händer när vi tar bort amethod från klassen, vilket krävs av gränssnittet, som Chirp () – metoden. Visual Studio varnar oss för att implementeringen inte är klar. När du har visuell bekräftelse på gränssnittets beroende av klassen, sätt tillbaka metoden där den hör hemma.

Låt oss skriva fågel med en punkt efter det. Återigen kommer Visual Studio att erbjudaföljande metoder:

vi kan se att vi nu bara kan ringa de metoder som tillhandahålls av gränssnittet påinstansen. Det beror på att fågeln nu är en variabel av IBird-typen, intefågeltypen. Det betyder att vi inte kan ringa Peck () – metoden eftersom vi inte gjorde detlägg till det i gränssnittet.

Varför lämnade vi det i första hand, kanske du frågar? Massor av potentialskäl, vi har redan stött på en av dem. Genom att använda ett gränssnitt, wesimplify ett komplext objekt och exponera endast de delar som behövs i en viss del av programmet.

jag måste också lägga till att Gränssnitt inte kan instansieras. Med andra ord, dettakod kommer inte att fungera:

' this code won't workDim bird As IBird = New IBird()

flera arv

Visual Basic.NET, som de flesta programmeringsspråk, stöder inte multipleinheritance. Det betyder att vi inte kan ärva en klass från mer än en annan klass. Huvudsakligen, eftersom metodnamnkollisioner mycket väl kan uppstå närflera klasser som innehåller metoder med samma namn ärver sina metoderin i en annan klass. Flera arv bearbetas ofta med hjälp av gränssnitteftersom vi får implementera så många gränssnitt i en klass som vi vill. Aclass av sorten tillåter oss bara att arbeta med sina instanser på sätt som vi vill ha. Vi skulle inte behöva oroa oss för vilken objekttyp det faktiskt är, eller vadDet ger bortom gränssnitten.

låt oss nu lägga till ett ilizard-gränssnitt till vårt projekt. Ödlorkommer att kunna andas och krypa:

Public Interface ILizard Sub Crawl() Sub Breathe()End Interface

därefter försöker vi ”flera arv”, mer exakt, implementera multipleinterfaces av en enda klass. Vi lägger till en Pterodactyl.vb klass till project.It kommer att genomföra iBird och ilizard gränssnitt:

Public Class Pterodactyl Implements ILizard, IBirdEnd Class

om vi svävar musen ovanför varje gränssnitt, dvs klicka på ILizard eller IBird, finns det en” glödlampa ” -genväg för att implementera gränssnittet i sammanhanget menu.It kan också hända automatiskt när du skriver ett gränssnitt namn att genomföra.Visual Studio genererar sedan automatiskt de nödvändiga klassmetoderna.

efter att ha implementerat båda gränssnitten kommer koden att se ut så här.Lägg märke till att det finns 2 andas() metoder eftersom metoden krävs både bybirdoch ILizard:

Public Class Pterodactyl Implements ILizard, IBird Public Sub Breathe() Implements ILizard.Breathe Throw New NotImplementedException() End Sub Public Sub Chirp() Implements IBird.Chirp Throw New NotImplementedException() End Sub Public Sub Crawl() Implements ILizard.Crawl Throw New NotImplementedException() End Sub Private Sub IBird_Breathe() Implements IBird.Breathe Throw New NotImplementedException() End SubEnd Class

eftersom andningen alltid kommer att vara densamma, låt oss ta bort metoden IBird_Breathe()och lägga till IBird.Andas efter Implementeringsnyckeln för den första andas () – metoden.

nu behöver vi bara ange vad vi vill att varje metod ska göra:

Public Sub Breathe() Implements ILizard.Breathe, IBird.Breathe Console.WriteLine("I'm breathing...")End SubPublic Sub Crawl() Implements ILizard.Crawl Console.WriteLine("I'm crawling...")End Subpublic Sub Chirp() Implements IBird.Chirp Console.WriteLine("♫ ♫♫ ♫ ♫ ♫♫")End Sub

det är ganska mycket det! Låt oss nu lägga till en instans av Pterodactyl-klassen inModule1.vb:

Dim pterodactyl As Pterodactyl = New Pterodactyl()

se till, att det har både fågel och ödla metoder:

vi håller oss till gränssnitt ett tag eftersom det finns mycket mer för dem som vi inte har täckt. I nästa lektion skriver du casting och object hierarchy i VB.NET, kommer du att lära dig meravancerade tekniker för objektorienterad programmering.

Lämna ett svar Avbryt svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *

Senaste inläggen

  • bloggen singel
  • hur tjänar du mynt på Rita något?
  • hur man kastar en sänke: vänsterhänt och högerhänt
  • hur man ökar dina leptinnivåer
  • hur exporterar du Hotmail-kontakter?
  • bet365 bonuskod: ange registreringskod TMG50 för December 2021
  • Hur man installerar SSL-certifikat på Centos 7
  • hur täta en rostfri diskbänk (ett effektivt sätt)

Arkiv

  • mars 2022
  • februari 2022
  • januari 2022
  • december 2021
  • november 2021

Meta

  • Logga in
  • Flöde för inlägg
  • Flöde för kommentarer
  • WordPress.org
  • Deutsch
  • Nederlands
  • Svenska
  • Norsk
  • Dansk
  • Español
  • Français
  • Português
  • Italiano
  • Română
  • Polski
  • Čeština
  • Magyar
  • Suomi
  • 日本語
  • 한국어
©2022 Leesweb | Theme: Wordly by SuperbThemes