Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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 visual basic-programmet. Du kan till och med skapa egna objekt och definiera ytterligare egenskaper och metoder för dem. Objekt fungerar som prefabricerade byggstenar för program – de låter dig 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 som du behöver när du har definierat en klass.
Tänk på kakformar och kakor för att förstå relationen mellan ett objekt och dess klass. Kakformen ä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
Bestäm från vilken klass du vill skapa ett objekt eller definiera din egen klass. Till exempel:
Public Class Customer Public Property AccountNumber As Integer End ClassSkriv en Dim-instruktion för att skapa en variabel som du kan tilldela en klassinstans till. Variabeln ska vara av den typ av önskad klass.
Dim nextCustomer As CustomerLägg till nyckelordet Ny operator för att initiera variabeln till en ny instans av klassen.
Dim nextCustomer As New CustomerNu kan du komma åt medlemmarna i klassen via objektvariabeln.
nextCustomer.AccountNumber = lastAccountNumber + 1
Anmärkning
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 kompileringstillfället 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 sitt eget namn, kan aktiveras separat och inaktiveras 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 "List Members", 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 listar IntelliSense alla instansmedlemmar och ingen av de delade medlemmarna. Om du skriver perioden efter själva klassnamnet listar IntelliSense 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 ForeColor-egenskapen för ett Label-objekt.
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 ändras objektets tillstånd märkbart, till exempel en
IsVisibleegenskap.Om du anger egenskapen ändras andra interna variabler eller andra egenskapers värden.
För att egenskapen ska kunna anges eller hämtas måste en serie steg utformas.
Använd fält när:
Värdet är av en självverifierande typ. Ett fel eller en automatisk datakonvertering inträffar till exempel om ett annat värde än
TrueellerFalsetilldelas till enBooleanvariabel.Alla värden i det intervall som stöds av datatypen är giltiga. Detta gäller för många egenskaper av typen
SingleellerDouble.Egenskapen är en
Stringdatatyp och det finns ingen begränsning för strängens storlek eller värde.Mer information finns i Egenskapsprocedurer.
Tips/Råd
Håll alltid de icke-konstanta fälten privata. När du vill göra den offentlig, använd istället en egenskap.
Metoder
En metod är en åtgärd som ett objekt kan utföra. Till exempel är Add en metod hos 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.
Evenemang
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 genereras 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 strikt tillhör 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 variabel för delad medlem har till exempel bara ett värde, som är tillgängligt för all kod som kan komma åt klassen.
Åtkomst till icke-delade medlemmar
Kontrollera att objektet har skapats från dess klass och tilldelats till en objektvariabel.
Dim secondForm As New System.Windows.Forms.FormI instruktionen för åtkomst av 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 enSharedmedlem 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
Sharedmedlem 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 sedan 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 har markerats 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.
Anmärkning
              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 nås.
Klasser och moduler använder också olika omfång för sina medlemmar. Medlemmar som definieras 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 deklarerats i en modul offentligt tillgängliga som standard och kan nås av valfri kod som kan komma åt modulen. Det innebär att variabler i en standardmodul i praktiken ä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 innehå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
Använd en klassuttryck för att definiera en klass som du vill skapa objektet du behöver från.
Public Class ReversibleButtonSe till att en
End Classinstruktion följer den sista kodraden i klassen. Som standard genererar den integrerade utvecklingsmiljön (IDE) automatiskt enEnd Classnär du anger enClass-instruktion.Följ instruktionen
Classomedelbart med en Inherits-instruktion. Ange den klass som den nya klassen härleds från.Inherits System.Windows.Forms.ButtonDen nya klassen ärver alla medlemmar som definierats av basklassen.
Lägg till koden för de ytterligare medlemmar som din härledda klass exponerar. Du kan till exempel lägga till en
ReverseColorsmetod 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 ClassOm du skapar ett objekt från
ReversibleButtonklassen kan det komma åt alla medlemmar i Button klassen, samt metodenReverseColorsoch andra nya medlemmar som du definierar iReversibleButton.
Härledda klasser ärver medlemmar från den klass 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 kan komma åt klassen 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.
Inneslutningsrelation
Ett annat sätt att objekt kan vara relaterade är en inneslutningsrelation. Containerobjekt kapslar logiskt in andra objekt. Objektet innehåller till exempel OperatingSystem logiskt ett Version objekt som det returnerar via dess Version egenskap. Observera att containerobjektet inte innehåller något annat objekt fysiskt.
Samlingar
En viss typ av objekt-inneslutning representeras av samlingar. Samlingar är grupper av liknande objekt som kan räknas upp. Visual Basic har stöd för en specifik syntax i För varje... Nästa instruktion som gör att du kan iterera genom objekten i en samling. Ofta tillåter samlingar dig att 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.
Relaterade ämnen
              Genomgång: Definiera klasser
Innehåller en stegvis beskrivning av hur du skapar en klass.
              Överlagrade egenskaper och metoder
Överlagrade egenskaper och metoder
              Grunderna för arv
Omfattar arvsmodifierare, övergripande metoder och egenskaper, MyClass och MyBase.
              Objektlivslängd: Hur objekt skapas och förstörs
Diskuterar hur du skapar och bortser från 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ärleda 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.