Dela via


Objekt och klasser i Visual Basic

Ett objekt är en kombination av kod och data som kan behandlas som en enhet. Ett objekt kan vara en del av ett program, till exempel en kontroll eller ett formulär. Ett helt program kan också vara ett -objekt.

När du skapar ett program i Visual Basic arbetar du ständigt med objekt. Du kan använda objekt som tillhandahålls av Visual Basic, till exempel kontroller, formulär och dataåtkomstobjekt. Du kan också använda objekt från andra program i ditt Visual Basic program. Du kan även skapa egna objekt och definiera ytterligare egenskaper och metoder för dem. Objekt fungerar som prefabricerade byggstenar för program – de gör att du kan skriva en kod en gång och återanvända den om och om igen.

I det här avsnittet beskrivs objekt i detalj.

Objekt och klasser

Varje objekt i Visual Basic definieras av en klass. En klass beskriver variabler, egenskaper, procedurer och händelser för ett objekt. Objekt är instanser av klasser; du kan skapa så många objekt du behöver när du har definierat en klass.

Tänk på cookie-fräsar och cookies för att förstå relationen mellan ett objekt och dess klass. Cookie-fräsen är klassen . Den definierar egenskaperna för varje cookie, till exempel storlek och form. Klassen används för att skapa objekt. Objekten är cookies.

Du måste skapa ett -objekt innan du kan komma åt dess medlemmar, förutom för Shared medlemmar som kan nås utan ett objekt i klassen .

Skapa ett objekt av en klass

  1. Bestäm från vilken klass du vill skapa ett objekt eller definiera din egen klass. Ett exempel:

    Public Class Customer
        Public Property AccountNumber As Integer
    End Class
    
  2. Skriv en Dim-instruktion för att skapa en variabel som du kan tilldela en klassinstans till. Variabeln ska vara av typen för den önskade klassen.

    Dim nextCustomer As Customer
    
  3. Lägg till nyckelordet Ny operator för att initiera variabeln till en ny instans av klassen.

    Dim nextCustomer As New Customer
    
  4. Nu kan du komma åt medlemmarna i klassen via objektvariabeln.

    nextCustomer.AccountNumber = lastAccountNumber + 1
    

Anteckning

När det är möjligt bör du deklarera att variabeln är av den klasstyp som du tänker tilldela den. Detta kallas tidig bindning. Om du inte känner till klasstypen vid kompileringen kan du anropa sen bindning genom att deklarera variabeln som objektdatatyp. Sen bindning kan dock göra prestanda långsammare och begränsa åtkomsten till körningsobjektets medlemmar. Mer information finns i Deklaration av objektvariabel.

Flera instanser

Objekt som nyligen skapats från en klass är ofta identiska med varandra. När de finns som enskilda objekt kan dock deras variabler och egenskaper ändras oberoende av de andra instanserna. Om du till exempel lägger till tre kryssrutor i ett formulär är varje kryssruteobjekt en instans av CheckBox klassen . De enskilda CheckBox objekten delar en gemensam uppsättning egenskaper och funktioner (egenskaper, variabler, procedurer och händelser) som definieras av klassen. Var och en har dock ett eget namn, kan aktiveras och inaktiveras separat och kan placeras på en annan plats i formuläret.

Objektmedlemmar

Ett objekt är ett element i ett program som representerar en instans av en klass. Fält, egenskaper, metoder och händelser är byggstenarna för objekt och utgör deras medlemmar.

Medlemsåtkomst

Du kommer åt en medlem i ett objekt genom att i ordning ange namnet på objektvariabeln, en punkt (.) och namnet på medlemmen. I följande exempel anges egenskapen för Text ett Label objekt.

warningLabel.Text = "Data not saved"

IntelliSense-lista över medlemmar

IntelliSense listar medlemmar i en klass när du anropar alternativet Listmedlemmar, till exempel när du skriver en punkt (.) som en operator för medlemsåtkomst. Om du skriver perioden efter namnet på en variabel som deklarerats som en instans av den klassen visar IntelliSense alla instansmedlemmar och ingen av de delade medlemmarna. Om du skriver perioden efter själva klassnamnet visar IntelliSense en lista över alla delade medlemmar och ingen av instansmedlemmarna. Mer information finns i Använda IntelliSense.

Fält och egenskaper

Fält och egenskaper representerar information som lagras i ett objekt. Du hämtar och anger deras värden med tilldelningsinstruktioner på samma sätt som du hämtar och anger lokala variabler i en procedur. I följande exempel hämtas Width egenskapen och egenskapen för ett Label objekt angesForeColor.

Dim warningWidth As Integer = warningLabel.Width
warningLabel.ForeColor = System.Drawing.Color.Red

Observera att ett fält även kallas för en medlemsvariabel.

Använd egenskapsprocedurer när:

  • Du måste styra när och hur ett värde anges eller hämtas.

  • Egenskapen har en väldefinierad uppsättning värden som måste verifieras.

  • Om du anger värdet får du en märkbar ändring i objektets tillstånd, till exempel en IsVisible egenskap.

  • Om du anger egenskapen ändras andra interna variabler eller andra egenskapers värden.

  • En uppsättning steg måste utföras innan egenskapen kan anges eller hämtas.

Använd fält när:

  • Värdet är av en självverifierande typ. Till exempel inträffar ett fel eller automatisk datakonvertering om ett annat värde än True eller False tilldelas till en Boolean variabel.

  • Alla värden i det intervall som stöds av datatypen är giltiga. Detta gäller för många egenskaper av typen Single eller Double.

  • Egenskapen är en String datatyp och det finns ingen begränsning för strängens storlek eller värde.

  • Mer information finns i Egenskapsprocedurer.

Tips

Håll alltid de icke-konstanta fälten privata. När du vill göra den offentlig använder du en egenskap i stället.

Metoder

En metod är en åtgärd som ett objekt kan utföra. Är till exempel Add en metod för objektet ComboBox som lägger till en ny post i en kombinationsruta.

I följande exempel visas metoden för Start ett Timer -objekt.

Dim safetyTimer As New System.Windows.Forms.Timer
safetyTimer.Start()

Observera att en metod helt enkelt är en procedur som exponeras av ett objekt.

Mer information finns i Procedurer.

Händelser

En händelse är en åtgärd som identifieras av ett objekt, till exempel att klicka med musen eller trycka på en nyckel och som du kan skriva kod för att svara på. Händelser kan inträffa till följd av en användaråtgärd eller programkod, eller så kan de orsakas av systemet. Kod som signalerar en händelse sägs höja händelsen, och kod som svarar på den sägs hantera den.

Du kan också utveckla egna anpassade händelser som ska aktiveras av dina objekt och hanteras av andra objekt. Mer information finns i Händelser.

Instansmedlemmar och delade medlemmar

När du skapar ett objekt från en klass blir resultatet en instans av den klassen. Medlemmar som inte deklareras med det delade nyckelordet är instansmedlemmar som tillhör enbart den specifika instansen. En instansmedlem i en instans är oberoende av samma medlem i en annan instans av samma klass. En instansmedlemsvariabel kan till exempel ha olika värden i olika instanser.

Medlemmar som deklareras med nyckelordet Shared är delade medlemmar, som tillhör klassen som helhet och inte till någon viss instans. En delad medlem finns bara en gång, oavsett hur många instanser av klassen du skapar, eller även om du inte skapar några instanser. En delad medlemsvariabel har till exempel bara ett värde, som är tillgängligt för all kod som har åtkomst till klassen.

Åtkomst till icke-delade medlemmar

  1. Kontrollera att objektet har skapats från dess -klass och tilldelats till en objektvariabel.

    Dim secondForm As New System.Windows.Forms.Form
    
  2. I -instruktionen som kommer åt medlemmen följer du objektvariabelnamnet med operatorn för medlemsåtkomst (.) och sedan medlemsnamnet.

    secondForm.Show()
    

Åtkomst till delade medlemmar

  • Följ klassnamnet med operatorn för medlemsåtkomst (.) och sedan medlemsnamnet. Du bör alltid komma åt en Shared medlem av objektet direkt via klassnamnet.

    Console.WriteLine("This computer is called " & Environment.MachineName)
    
  • Om du redan har skapat ett objekt från klassen kan du också komma åt en Shared medlem via objektets variabel.

Skillnader mellan klasser och moduler

Den största skillnaden mellan klasser och moduler är att klasser kan instansieras som objekt medan standardmoduler inte kan göra det. Eftersom det bara finns en kopia av en standardmoduls data får alla andra delar av programmet samma värde om den läser variabeln när en del av programmet ändrar en offentlig variabel i en standardmodul. Objektdata finns däremot separat för varje instansierat objekt. En annan skillnad är att till skillnad från standardmoduler kan klasser implementera gränssnitt. Om en klass är markerad med MustInherit-modifieraren kan den inte instansieras direkt. Den skiljer sig dock fortfarande från en modul eftersom den kan ärvas medan moduler inte kan ärvas.

Anteckning

Shared När modifieraren tillämpas på en klassmedlem associeras den med själva klassen i stället för en viss instans av klassen. Medlemmen nås direkt med hjälp av klassnamnet, på samma sätt som modulmedlemmar används.

Klasser och moduler använder också olika omfång för sina medlemmar. Medlemmar som definierats i en klass är begränsade inom en specifik instans av klassen och finns bara under objektets livslängd. Om du vill komma åt klassmedlemmar utanför en klass måste du använda fullständigt kvalificerade namn i formatet Objekt. Medlem.

Å andra sidan är medlemmar som deklareras i en modul offentligt tillgängliga som standard och kan nås av all kod som kan komma åt modulen. Det innebär att variabler i en standardmodul är globala variabler eftersom de är synliga var som helst i projektet och de finns under programmets livslängd.

Återanvända klasser och objekt

Med objekt kan du deklarera variabler och procedurer en gång och sedan återanvända dem när det behövs. Om du till exempel vill lägga till en stavningskontroll i ett program kan du definiera alla variabler och stödfunktioner för att tillhandahålla funktioner för stavningskontroll. Om du skapar stavningskontroll som en klass kan du återanvända den i andra program genom att lägga till en referens till den kompilerade sammansättningen. Ännu bättre är att du kanske kan spara lite arbete genom att använda en stavningskontrollklass som någon annan redan har utvecklat.

.NET innehåller många exempel på komponenter som är tillgängliga för användning. I följande exempel används TimeZone klassen i System namnområdet. TimeZone tillhandahåller medlemmar som gör att du kan hämta information om tidszonen för det aktuella datorsystemet.

Public Sub ExamineTimeZone()
    Dim tz As System.TimeZone = System.TimeZone.CurrentTimeZone
    Dim s As String = "Current time zone is "
    s &= CStr(tz.GetUtcOffset(Now).Hours) & " hours and "
    s &= CStr(tz.GetUtcOffset(Now).Minutes) & " minutes "
    s &= "different from UTC (coordinated universal time)"
    s &= vbCrLf & "and is currently "
    If tz.IsDaylightSavingTime(Now) = False Then s &= "not "
    s &= "on ""summer time""."
    Console.WriteLine(s)
End Sub

I föregående exempel deklarerar den första Dim-instruktionen en objektvariabel av typen TimeZone och tilldelar den ett TimeZone objekt som returneras av CurrentTimeZone egenskapen.

Relationer mellan objekt

Objekt kan vara relaterade till varandra på flera sätt. De huvudsakliga typerna av relationer är hierarkiska och inneslutning.

Hierarkisk relation

När klasser härleds från mer grundläggande klasser sägs de ha en hierarkisk relation. Klasshierarkier är användbara när du beskriver objekt som är en undertyp av en mer allmän klass.

I följande exempel antar vi att du vill definiera en särskild typ av Button som fungerar som en normal Button men som också exponerar en metod som vänder förgrunds- och bakgrundsfärgerna.

Definiera en klass som härleds från en redan befintlig klass

  1. Använd en klassuttryck för att definiera en klass som du vill skapa objektet du behöver från.

    Public Class ReversibleButton
    

    Se till att en End Class instruktion följer den sista kodraden i klassen. Som standard genererar den integrerade utvecklingsmiljön (IDE) automatiskt en End Class när du anger en Class instruktion.

  2. Följ instruktionen Class omedelbart med en Inherits-instruktion. Ange den klass som den nya klassen härleds från.

    Inherits System.Windows.Forms.Button
    

    Den nya klassen ärver alla medlemmar som definierats av basklassen.

  3. Lägg till koden för de ytterligare medlemmar som din härledda klass exponerar. Du kan till exempel lägga till en ReverseColors metod och din härledda klass kan se ut så här:

    Public Class ReversibleButton
        Inherits System.Windows.Forms.Button
            Public Sub ReverseColors()
                Dim saveColor As System.Drawing.Color = Me.BackColor
                Me.BackColor = Me.ForeColor
                Me.ForeColor = saveColor
           End Sub
    End Class
    

    Om du skapar ett objekt från ReversibleButton klassen kan det komma åt alla medlemmar i Button klassen, samt ReverseColors metoden och andra nya medlemmar som du definierar i ReversibleButton.

Härledda klasser ärver medlemmar från den klass som de baseras på, så att du kan lägga till komplexitet när du går vidare i en klasshierarki. Mer information finns i Arvsgrunder.

Kompilera koden

Se till att kompilatorn har åtkomst till den klass som du tänker härleda din nya klass från. Det kan innebära att namnet kvalificeras fullständigt, som i föregående exempel, eller att dess namnområde identifieras i en importinstruktor (.NET-namnområde och typ). Om klassen finns i ett annat projekt kan du behöva lägga till en referens till projektet. Mer information finns i Hantera referenser i ett projekt.

Behållarrelationer

Ett annat sätt att relatera objekt är en inneslutningsrelation. Containerobjekt kapslar logiskt in andra objekt. Objektet innehåller till exempel OperatingSystem logiskt ett Version objekt som det returnerar via egenskapen Version . Observera att containerobjektet inte innehåller något annat objekt fysiskt.

Samlingar

En viss typ av objekt-inneslutning representeras av samlingar. Samlingar är grupper med liknande objekt som kan räknas upp. Visual Basic stöder en specifik syntax i för varje... Nästa instruktion som gör att du kan iterera genom objekten i en samling. Dessutom kan du med samlingar ofta använda en Item[] för att hämta element efter deras index eller genom att associera dem med en unik sträng. Samlingar kan vara enklare att använda än matriser eftersom de gör att du kan lägga till eller ta bort objekt utan att använda index. På grund av deras användarvänlighet används samlingar ofta för att lagra formulär och kontroller.

Genomgång: Definiera klasser
Innehåller en stegvis beskrivning av hur du skapar en klass.

Överlagrade egenskaper och metoder
Överlagrade egenskaper och metoder

Grunderna om arv
Omfattar arvsmodifierare, övergripande metoder och egenskaper, MyClass och MyBase.

Objektlivslängd: Hur objekt skapas och förstörs
Diskuterar skapande och disponering av klassinstanser.

Anonyma typer
Beskriver hur du skapar och använder anonyma typer, vilket gör att du kan skapa objekt utan att skriva en klassdefinition för datatypen.

Objektinitierare: Namngivna och anonyma typer
Diskuterar objektinitierare som används för att skapa instanser av namngivna och anonyma typer med hjälp av ett enda uttryck.

Anvisningar: Härled egenskapsnamn och typer i anonyma typdeklarationer
Förklarar hur du härleder egenskapsnamn och typer i anonyma typdeklarationer. Innehåller exempel på lyckad och misslyckad slutsatsdragning.