Share via


Objectgeoriënteerd programmeren (Visual Basic)

Visual Basic biedt volledige ondersteuning voor objectgeoriënteerde programmering, waaronder inkapseling, overname en polymorfisme.

Inkapseling betekent dat een groep gerelateerde eigenschappen, methoden en andere leden worden behandeld als één eenheid of object.

Overname beschrijft de mogelijkheid om nieuwe klassen te maken op basis van een bestaande klasse.

Polymorfisme betekent dat u meerdere klassen kunt hebben die door elkaar kunnen worden gebruikt, ook al implementeert elke klasse op verschillende manieren dezelfde eigenschappen of methoden.

In deze sectie worden de volgende concepten beschreven:

Klassen en objecten

De termenklasseen het object worden soms door elkaar gebruikt, maar in feite beschrijven klassen het type objecten, terwijl objecten bruikbare exemplaren van klassen zijn. Het maken van een object wordt dus instantiation genoemd. Een klasse is een blauwdruk met de analogie van de blauwdruk en een object is een gebouw dat is gemaakt van die blauwdruk.

Een klasse definiëren:

Class SampleClass
End Class

Visual Basic biedt ook een light-versie van klassen die structuren worden genoemd die handig zijn wanneer u een grote reeks objecten moet maken en hiervoor niet te veel geheugen wilt gebruiken.

Een structuur definiëren:

Structure SampleStructure
End Structure

Zie voor meer informatie:

Klasleden

Elke klasse kan verschillende klasseleden hebben die eigenschappen bevatten die klassegegevens beschrijven, methoden die klassegedrag definiëren en gebeurtenissen die communicatie tussen verschillende klassen en objecten bieden.

Eigenschappen en velden

Velden en eigenschappen vertegenwoordigen informatie die een object bevat. Velden zijn net als variabelen omdat ze rechtstreeks kunnen worden gelezen of ingesteld.

Een veld definiëren:

Class SampleClass
    Public SampleField As String
End Class

Eigenschappen hebben procedures voor ophalen en instellen, die meer controle bieden over hoe waarden worden ingesteld of geretourneerd.

Met Visual Basic kunt u een privéveld maken voor het opslaan van de eigenschapswaarde of gebruikmaken van zogenaamde automatisch geïmplementeerde eigenschappen die dit veld automatisch achter de schermen maken en de basislogica voor de eigenschapsprocedures opgeven.

Een automatisch geïmplementeerde eigenschap definiëren:

Class SampleClass
    Public Property SampleProperty as String
End Class

Als u extra bewerkingen wilt uitvoeren voor het lezen en schrijven van de eigenschapswaarde, definieert u een veld voor het opslaan van de eigenschapswaarde en geeft u de basislogica op voor het opslaan en ophalen ervan:

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 meeste eigenschappen hebben methoden of procedures voor het instellen en ophalen van de eigenschapswaarde. U kunt echter alleen-lezen- of alleen-schrijven-eigenschappen maken om te voorkomen dat ze worden gewijzigd of gelezen. In Visual Basic kunt u trefwoorden gebruiken en WriteOnly trefwoorden gebruikenReadOnly. Eigenschappen die automatisch zijn geïmplementeerd, kunnen echter niet alleen-lezen of alleen-schrijven zijn.

Zie voor meer informatie:

Methoden

Een methode is een actie die een object kan uitvoeren.

Notitie

In Visual Basic zijn er twee manieren om een methode te maken: de Sub instructie wordt gebruikt als de methode geen waarde retourneert. De Function instructie wordt gebruikt als een methode een waarde retourneert.

Een methode van een klasse definiëren:

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

Een klasse kan verschillende implementaties of overbelastingen hebben van dezelfde methode die verschilt in het aantal parameters of parametertypen.

Een methode overbelasten:

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

In de meeste gevallen declareert u een methode binnen een klassedefinitie. Visual Basic biedt echter ook ondersteuning voor uitbreidingsmethoden waarmee u methoden kunt toevoegen aan een bestaande klasse buiten de werkelijke definitie van de klasse.

Zie voor meer informatie:

Constructors

Constructors zijn klassemethoden die automatisch worden uitgevoerd wanneer een object van een bepaald type wordt gemaakt. Constructors initialiseren meestal de gegevensleden van het nieuwe object. Een constructor kan slechts eenmaal worden uitgevoerd wanneer een klasse wordt gemaakt. Bovendien wordt de code in de constructor altijd uitgevoerd vóór andere code in een klasse. U kunt echter meerdere constructoroverbelastingen op dezelfde manier maken als voor elke andere methode.

Een constructor definiëren voor een klasse:

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

Zie voor meer informatie: Levensduur van objecten: Hoe objecten worden gemaakt en vernietigd.

Destructors

Destructors worden gebruikt om instanties van klassen te destructeren. In .NET Framework beheert de garbagecollector automatisch de toewijzing en het vrijlaten van geheugen voor de beheerde objecten in uw toepassing. Mogelijk hebt u echter nog steeds destructors nodig om onbeheerde resources op te schonen die door uw toepassing worden gemaakt. Er kan slechts één destructor voor een klasse zijn.

Zie Garbagecollection voor meer informatie over destructors en garbagecollection in .NET Framework.

gebeurtenis

Met gebeurtenissen kan een klasse of object andere klassen of objecten op de hoogte stellen wanneer er iets van belang is. De klasse die de gebeurtenis verzendt (of genereert) wordt de uitgever genoemd en de klassen die de gebeurtenis ontvangen (of verwerken) worden abonnees genoemd. Zie Gebeurtenissen voor meer informatie over gebeurtenissen, hoe deze worden gegenereerd en verwerkt.

Geneste klassen

Een klasse die in een andere klasse is gedefinieerd, wordt genest genoemd. Standaard is de geneste klasse privé.

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

Als u een exemplaar van de geneste klasse wilt maken, gebruikt u de naam van de containerklasse gevolgd door de punt en vervolgens de naam van de geneste klasse:

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

Toegangsaanpassingen en toegangsniveaus

Alle klassen en klasleden kunnen opgeven welk toegangsniveau ze bieden aan andere klassen met behulp van toegangsaanpassingen.

De volgende toegangsaanpassingen zijn beschikbaar:

Visual Basic Modifier Definitie
Openbaar Het type of lid kan worden geopend door elke andere code in dezelfde assembly of een andere assembly die ernaar verwijst.
Privé Het type of lid kan alleen worden geopend met code in dezelfde klasse.
Beschermd Het type of lid kan alleen worden geopend met code in dezelfde klasse of in een afgeleide klasse.
Vriend Het type of lid kan worden geopend door elke code in dezelfde assembly, maar niet vanuit een andere assembly.
Protected Friend Het type of lid kan worden geopend door elke code in dezelfde assembly of door een afgeleide klasse in een andere assembly.

Zie Access-niveaus in Visual Basic voor meer informatie.

Klassen instantiëren

Als u een object wilt maken, moet u een instantie van een klasse maken of een klasse-exemplaar maken.

Dim sampleObject as New SampleClass()

Nadat u een klasse hebt geïnstrigeren, kunt u waarden toewijzen aan de eigenschappen en velden van het exemplaar en klassemethoden aanroepen.

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

Als u waarden wilt toewijzen aan eigenschappen tijdens het proces van klasse-instantiëring, gebruikt u objectinitiitiizers:

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

Zie voor meer informatie:

Gedeelde klassen en leden

Een gedeeld lid van de klasse is een eigenschap, procedure of veld dat wordt gedeeld door alle exemplaren van een klasse.

Een gedeeld lid definiëren:

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

Als u toegang wilt krijgen tot het gedeelde lid, gebruikt u de naam van de klasse zonder een object van deze klasse te maken:

MsgBox(SampleClass.SampleString)

Gedeelde modules in Visual Basic hebben alleen gedeelde leden en kunnen niet worden geïnstantieerd. Gedeelde leden hebben ook geen toegang tot niet-gedeelde eigenschappen, velden of methoden

Zie voor meer informatie:

Anonieme typen

Met anonieme typen kunt u objecten maken zonder een klassedefinitie voor het gegevenstype te schrijven. In plaats daarvan genereert de compiler een klasse voor u. De klasse heeft geen bruikbare naam en bevat de eigenschappen die u opgeeft bij het declareren van het object.

Een exemplaar van een anoniem type maken:

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

Zie voor meer informatie: Anonieme typen.

Overname

Met overname kunt u een nieuwe klasse maken die het gedrag dat is gedefinieerd in een andere klasse opnieuw gebruikt, uitbreidt en wijzigt. De klasse waarvan de leden worden overgenomen, wordt de basisklasse genoemd en de klasse die deze leden over neemt, wordt de afgeleide klasse genoemd. Alle klassen in Visual Basic nemen echter impliciet over van de Object klasse die ondersteuning biedt voor .NET-klassenhiërarchie en bieden services op laag niveau aan alle klassen.

Notitie

Visual Basic biedt geen ondersteuning voor meerdere overnames. Dat wil gezegd, u kunt slechts één basisklasse opgeven voor een afgeleide klasse.

Overnemen van een basisklasse:

Class DerivedClass
    Inherits BaseClass
End Class

Standaard kunnen alle klassen worden overgenomen. U kunt echter opgeven of een klasse niet mag worden gebruikt als basisklasse of een klasse mag maken die alleen als basisklasse kan worden gebruikt.

Als u wilt opgeven dat een klasse niet kan worden gebruikt als basisklasse:

NotInheritable Class SampleClass
End Class

Als u wilt opgeven dat een klasse alleen als basisklasse kan worden gebruikt en niet kan worden geïnstantieerd:

MustInherit Class BaseClass
End Class

Zie voor meer informatie:

Leden overschrijven

Standaard neemt een afgeleide klasse alle leden over van de basisklasse. Als u het gedrag van het overgenomen lid wilt wijzigen, moet u dit overschrijven. Dat wil gezegd, u kunt een nieuwe implementatie van de methode, eigenschap of gebeurtenis definiëren in de afgeleide klasse.

De volgende modifiers worden gebruikt om te bepalen hoe eigenschappen en methoden worden overschreven:

Visual Basic Modifier Definitie
Overschrijfbaar Hiermee kan een klasselid worden overschreven in een afgeleide klasse.
Overschrijft Hiermee overschrijft u een virtueel (overschrijfbaar) lid dat is gedefinieerd in de basisklasse.
NotOverridable Hiermee voorkomt u dat een lid wordt overschreven in een overnemende klasse.
MustOverride Vereist dat een klasselid wordt overschreven in de afgeleide klasse.
Schaduwen Hiermee verbergt u een lid dat is overgenomen van een basisklasse

Interfaces

Interfaces, zoals klassen, definiëren een set eigenschappen, methoden en gebeurtenissen. Maar in tegenstelling tot klassen bieden interfaces geen implementatie. Ze worden geïmplementeerd door klassen en gedefinieerd als afzonderlijke entiteiten van klassen. Een interface vertegenwoordigt een contract, omdat een klasse die een interface implementeert elk aspect van die interface precies moet implementeren zoals deze is gedefinieerd.

Een interface definiëren:

Public Interface ISampleInterface
    Sub DoSomething()
End Interface

Een interface implementeren in een klasse:

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

Zie voor meer informatie:

Generics

Klassen, structuren, interfaces en methoden in .NET kunnen typeparameters bevatten die typen objecten definiëren die ze kunnen opslaan of gebruiken. Het meest voorkomende voorbeeld van generieken is een verzameling, waarin u het type objecten kunt opgeven dat moet worden opgeslagen in een verzameling.

Een algemene klasse definiëren:

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

Een exemplaar van een algemene klasse maken:

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

Zie voor meer informatie:

Gedelegeerden

Een gemachtigde is een type dat een methodehandtekening definieert en een verwijzing kan bieden naar elke methode met een compatibele handtekening. U kunt de methode aanroepen (of aanroepen) via de gemachtigde. Gemachtigden worden gebruikt om methoden als argumenten door te geven aan andere methoden.

Notitie

Gebeurtenis-handlers zijn niets meer dan methoden die worden aangeroepen via gemachtigden. Zie Gebeurtenissen voor meer informatie over het gebruik van gemachtigden bij het verwerken van gebeurtenissen.

Een gemachtigde maken:

Delegate Sub SampleDelegate(ByVal str As String)

Een verwijzing maken naar een methode die overeenkomt met de handtekening die is opgegeven door de gemachtigde:

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

Zie voor meer informatie:

Zie ook