Objektorienterad programmering (Visual Basic)

Visual Basic har fullt stöd för objektorienterad programmering, inklusive inkapsling, arv och polymorfism.

Inkapsling innebär att en grupp med relaterade egenskaper, metoder och andra medlemmar behandlas som en enda enhet eller ett objekt.

Arv beskriver möjligheten att skapa nya klasser baserat på en befintlig klass.

Polymorfism innebär att du kan ha flera klasser som kan användas omväxlande, även om varje klass implementerar samma egenskaper eller metoder på olika sätt.

I det här avsnittet beskrivs följande begrepp:

Klasser och objekt

Termerna klass och objekt används ibland utbytbart, men i själva verket beskriver klasser typen av objekt, medan objekt är användbara instanser av klasser. Därför kallas åtgärden att skapa ett objekt instansiering. Med hjälp av skissanalogin är en klass en skiss och ett objekt är en byggnad gjord av den skissen.

Så här definierar du en klass:

Class SampleClass
End Class

Visual Basic innehåller också en lätt version av klasser som kallas strukturer som är användbara när du behöver skapa en stor matris med objekt och inte vill använda för mycket minne för det.

Så här definierar du en struktur:

Structure SampleStructure
End Structure

Mer information finns i:

Klassmedlemmar

Varje klass kan ha olika klassmedlemmar som innehåller egenskaper som beskriver klassdata, metoder som definierar klassbeteende och händelser som ger kommunikation mellan olika klasser och objekt.

Egenskaper och fält

Fält och egenskaper representerar information som ett objekt innehåller. Fält är som variabler eftersom de kan läsas eller anges direkt.

Så här definierar du ett fält:

Class SampleClass
    Public SampleField As String
End Class

Egenskaper har hämta och ange procedurer, vilket ger mer kontroll över hur värden anges eller returneras.

Med Visual Basic kan du antingen skapa ett privat fält för att lagra egenskapsvärdet eller använda så kallade automatiskt implementerade egenskaper som skapar det här fältet automatiskt i bakgrunden och tillhandahåller den grundläggande logiken för egenskapsprocedurerna.

Så här definierar du en automatiskt implementerad egenskap:

Class SampleClass
    Public Property SampleProperty as String
End Class

Om du behöver utföra några ytterligare åtgärder för att läsa och skriva egenskapsvärdet definierar du ett fält för lagring av egenskapsvärdet och anger den grundläggande logiken för att lagra och hämta det:

Class SampleClass
    Private m_Sample As String
    Public Property Sample() As String
        Get
            ' Return the value stored in the field.
            Return m_Sample
        End Get
        Set(ByVal Value As String)
            ' Store the value in the field.
            m_Sample = Value
        End Set
    End Property
End Class

De flesta egenskaper har metoder eller procedurer för att både ange och hämta egenskapsvärdet. Du kan dock skapa skrivskyddade eller skrivskyddade egenskaper för att hindra dem från att ändras eller läsas. I Visual Basic kan du använda ReadOnly och WriteOnly nyckelord. Auto-implementerade egenskaper kan dock inte vara skrivskyddade eller skrivskyddade.

Mer information finns i:

Metoder

En metod är en åtgärd som ett objekt kan utföra.

Kommentar

I Visual Basic finns det två sätt att skapa en metod: -instruktionen Sub används om metoden inte returnerar ett värde. -instruktionen Function används om en metod returnerar ett värde.

Så här definierar du en metod för en klass:

Class SampleClass
    Public Function SampleFunc(ByVal SampleParam As String)
        ' Add code here
    End Function
End Class

En klass kan ha flera implementeringar, eller överlagringar, av samma metod som skiljer sig åt i antalet parametrar eller parametertyper.

Så här överbelastar du en metod:

Overloads Sub Display(ByVal theChar As Char)
    ' Add code that displays Char data.
End Sub
Overloads Sub Display(ByVal theInteger As Integer)
    ' Add code that displays Integer data.
End Sub

I de flesta fall deklarerar du en metod inom en klassdefinition. Visual Basic har dock även stöd för tilläggsmetoder som gör att du kan lägga till metoder i en befintlig klass utanför den faktiska definitionen av klassen.

Mer information finns i:

Konstruktorer

Konstruktorer är klassmetoder som körs automatiskt när ett objekt av en viss typ skapas. Konstruktorer initierar vanligtvis datamedlemmar i det nya objektet. En konstruktor kan bara köras en gång när en klass skapas. Dessutom körs koden i konstruktorn alltid före någon annan kod i en klass. Du kan dock skapa flera konstruktoröverlagringar på samma sätt som för andra metoder.

Så här definierar du en konstruktor för en klass:

Class SampleClass
    Sub New(ByVal s As String)
        // Add code here.
    End Sub
End Class

Mer information finns i: Objektlivslängd: Hur objekt skapas och förstörs.

Destructors

Destructors används för att destruct instanser av klasser. I .NET Framework hanterar skräpinsamlaren automatiskt allokeringen och frigörandet av minne för de hanterade objekten i ditt program. Du kan dock fortfarande behöva destruktorer för att rensa alla ohanterade resurser som programmet skapar. Det kan bara finnas en destructor för en klass.

Mer information om destructors och skräpinsamling i .NET Framework finns i Skräpinsamling.

Händelser

Händelser gör det möjligt för en klass eller ett objekt att meddela andra klasser eller objekt när något av intresse inträffar. Klassen som skickar (eller höjer) händelsen kallas utgivare och de klasser som tar emot (eller hanterar) händelsen kallas prenumeranter. Mer information om händelser, hur de höjs och hanteras finns i Händelser.

Kapslade klasser

En klass som definieras i en annan klass kallas kapslad. Som standard är den kapslade klassen privat.

Class Container
    Class Nested
    ' Add code here.
    End Class
End Class

Om du vill skapa en instans av den kapslade klassen använder du namnet på containerklassen följt av punkten och sedan namnet på den kapslade klassen:

Dim nestedInstance As Container.Nested = New Container.Nested()

Åtkomstmodifierare och åtkomstnivåer

Alla klasser och klassmedlemmar kan ange vilken åtkomstnivå de tillhandahåller till andra klasser med hjälp av åtkomstmodifierare.

Följande åtkomstmodifierare är tillgängliga:

Visual Basic-modifierare Definition
Offentliga Typen eller medlemmen kan nås av någon annan kod i samma sammansättning eller en annan sammansättning som refererar till den.
Privat Typen eller medlemmen kan bara nås med kod i samma klass.
Skyddade Typen eller medlemmen kan bara nås med kod i samma klass eller i en härledd klass.
Vän Typen eller medlemmen kan nås av valfri kod i samma sammansättning, men inte från en annan sammansättning.
Protected Friend Typen eller medlemmen kan nås av valfri kod i samma sammansättning eller av någon härledd klass i en annan sammansättning.

Mer information finns i Åtkomstnivåer i Visual Basic.

Instansiera klasser

Om du vill skapa ett objekt måste du instansiera en klass eller skapa en klassinstans.

Dim sampleObject as New SampleClass()

När du har instansierar en klass kan du tilldela värden till instansens egenskaper och fält och anropa klassmetoder.

' Set a property value.
sampleObject.SampleProperty = "Sample String"
' Call a method.
sampleObject.SampleMethod()

Om du vill tilldela värden till egenskaper under klassinstansieringsprocessen använder du objektinitierare:

Dim sampleObject = New SampleClass With
    {.FirstProperty = "A", .SecondProperty = "B"}

Mer information finns i:

Delade klasser och medlemmar

En delad medlem i klassen är en egenskap, en procedur eller ett fält som delas av alla instanser av en klass.

Så här definierar du en delad medlem:

Class SampleClass
    Public Shared SampleString As String = "Sample String"
End Class

Om du vill komma åt den delade medlemmen använder du namnet på klassen utan att skapa ett objekt i den här klassen:

MsgBox(SampleClass.SampleString)

Delade moduler i Visual Basic har endast delade medlemmar och kan inte instansieras. Delade medlemmar kan inte heller komma åt icke-delade egenskaper, fält eller metoder

Mer information finns i:

Anonyma typer

Med anonyma typer kan du skapa objekt utan att skriva en klassdefinition för datatypen. I stället genererar kompilatorn en klass åt dig. Klassen har inget användbart namn och innehåller de egenskaper som du anger när objektet deklareras.

Så här skapar du en instans av en anonym typ:

' sampleObject is an instance of a simple anonymous type.
Dim sampleObject =
    New With {Key .FirstProperty = "A", .SecondProperty = "B"}

Mer information finns i: Anonyma typer.

Arv

Med arv kan du skapa en ny klass som återanvänder, utökar och ändrar det beteende som definieras i en annan klass. Klassen vars medlemmar ärvs kallas för basklassen och klassen som ärver dessa medlemmar kallas för den härledda klassen. Alla klasser i Visual Basic ärver dock implicit från klassen Object som stöder .NET-klasshierarki och tillhandahåller tjänster på låg nivå till alla klasser.

Kommentar

Visual Basic stöder inte flera arv. Du kan alltså bara ange en basklass för en härledd klass.

Så här ärver du från en basklass:

Class DerivedClass
    Inherits BaseClass
End Class

Som standard kan alla klasser ärvas. Du kan dock ange om en klass inte får användas som basklass eller skapa en klass som endast kan användas som basklass.

Så här anger du att en klass inte kan användas som basklass:

NotInheritable Class SampleClass
End Class

Om du vill ange att en klass endast kan användas som basklass och inte kan instansieras:

MustInherit Class BaseClass
End Class

Mer information finns i:

Åsidosättande medlemmar

Som standard ärver en härledd klass alla medlemmar från basklassen. Om du vill ändra beteendet för den ärvda medlemmen måste du åsidosätta den. Du kan alltså definiera en ny implementering av metoden, egenskapen eller händelsen i den härledda klassen.

Följande modifierare används för att styra hur egenskaper och metoder åsidosättas:

Visual Basic-modifierare Definition
Kan åsidosättas Tillåter att en klassmedlem åsidosättas i en härledd klass.
Åsidosätter Åsidosätter en virtuell (åsidosättningsbar) medlem som definierats i basklassen.
NotOverridable Hindrar en medlem från att åsidosättas i en ärvande klass.
MustOverride Kräver att en klassmedlem åsidosätts i den härledda klassen.
Skuggor Döljer en medlem som ärvts från en basklass

Gränssnitt

Gränssnitt, till exempel klasser, definierar en uppsättning egenskaper, metoder och händelser. Men till skillnad från klasser tillhandahåller gränssnitt inte implementering. De implementeras av klasser och definieras som separata entiteter från klasser. Ett gränssnitt representerar ett kontrakt, eftersom en klass som implementerar ett gränssnitt måste implementera varje aspekt av gränssnittet exakt som det definieras.

Så här definierar du ett gränssnitt:

Public Interface ISampleInterface
    Sub DoSomething()
End Interface

Så här implementerar du ett gränssnitt i en klass:

Class SampleClass
    Implements ISampleInterface
    Sub DoSomething
        ' Method implementation.
    End Sub
End Class

Mer information finns i:

Generika

Klasser, strukturer, gränssnitt och metoder i .NET kan innehålla typparametrar som definierar typer av objekt som de kan lagra eller använda. Det vanligaste exemplet på generiska objekt är en samling där du kan ange vilken typ av objekt som ska lagras i en samling.

Så här definierar du en allmän klass:

Class SampleGeneric(Of T)
    Public Field As T
End Class

Så här skapar du en instans av en allmän klass:

Dim sampleObject As New SampleGeneric(Of String)
sampleObject.Field = "Sample string"

Mer information finns i:

Delegeringar

Ett ombud är en typ som definierar en metodsignatur och kan ge en referens till valfri metod med en kompatibel signatur. Du kan anropa (eller anropa) metoden via ombudet. Ombud används för att skicka metoder som argument till andra metoder.

Kommentar

Händelsehanterare är inget annat än metoder som anropas via ombud. Mer information om hur du använder ombud i händelsehantering finns i Händelser.

Så här skapar du ett ombud:

Delegate Sub SampleDelegate(ByVal str As String)

Så här skapar du en referens till en metod som matchar signaturen som anges av ombudet:

Class SampleClass
    ' Method that matches the SampleDelegate signature.
    Sub SampleSub(ByVal str As String)
        ' Add code here.
    End Sub
    ' Method that instantiates the delegate.
    Sub SampleDelegateSub()
        Dim sd As SampleDelegate = AddressOf SampleSub
        sd("Sample string")
    End Sub
End Class

Mer information finns i:

Se även