Visual Basic .NET Language
OOP-zoekwoorden
Zoeken…
Een klasse definiëren
Klassen zijn vitale aspecten van OOP. Een klasse is als de "blauwdruk" van een object. Een object heeft de eigenschappen van een klasse, maar de kenmerken worden niet binnen de klasse zelf gedefinieerd. Omdat elk object anders kan zijn, definiëren ze hun eigen kenmerken.
Public Class Person
End Class
Public Class Customer
End Class
Een klasse kan ook subklassen bevatten. Een subklasse neemt dezelfde eigenschappen en gedragingen over als de bovenliggende klasse, maar kan zijn eigen unieke eigenschappen en klassen hebben.
Overerving Modifiers (op klassen)
erft
Hiermee geeft u de basisklasse (of bovenliggende klasse) op
Public Class Person
End Class
Public Class Customer
Inherits Person
End Class
'One line notation
Public Class Student : Inherits Person
End Class
Mogelijke objecten:
Dim p As New Person
Dim c As New Customer
Dim s As New Student
NotInheritable
Voorkomt dat programmeurs de klasse als basisklasse gebruiken.
Public NotInheritable Class Person
End Class
Mogelijke objecten:
Dim p As New Person
MustInherit
Geeft aan dat de klasse alleen als basisklasse is bedoeld. (Abstracte klasse)
Public MustInherit Class Person
End Class
Public Class Customer
Inherits Person
End Class
Mogelijke objecten:
Dim c As New Customer
Overerving Modifiers (op eigenschappen en methoden)
Overridable
Hiermee kan een eigenschap of methode in een klasse worden overschreven in een afgeleide klasse.
Public Class Person
Public Overridable Sub DoSomething()
Console.WriteLine("Person")
End Sub
End Class
Overschrijvingen
Overschrijft een in de basisklasse gedefinieerde eigenschap of methode Overschrijfbaar.
Public Class Customer
Inherits Person
'Base Class must be Overridable
Public Overrides Sub DoSomething()
Console.WriteLine("Customer")
End Sub
End Class
NotOverridable
Voorkomt dat een eigenschap of methode wordt overschreven in een overervende klasse. Standaard gedrag. Kan alleen worden gedeclareerd op overschrijvingsmethoden
Public Class Person
Public Overridable Sub DoSomething()
Console.WriteLine("Person")
End Sub
End Class
Public Class Customer
Inherits Person
Public NotOverridable Overrides Sub DoSomething()
Console.WriteLine("Customer")
End Sub
End Class
Public Class DetailedCustomer
Inherits Customer
'DoSomething can't be overridden
End Class
Voorbeeld gebruik:
Dim p As New Person
p.DoSomething()
Dim c As New Customer
c.DoSomething()
Dim d As New DetailedCustomer
d.DoSomething()
Output:
Person
Customer
Customer
MustOverride
Vereist dat een afgeleide klasse de eigenschap of methode overschrijft.
MustOverride-methoden moeten worden gedeclareerd in MustInherit-klassen.
Public MustInherit Class Person
Public MustOverride Sub DoSomething()
'No method definition here
End Class
Public Class Customer
Inherits Person
'DoSomething must be overridden
Public Overrides Sub DoSomething()
Console.WriteLine("Customer")
End Sub
End Class
Voorbeeld gebruik:
Dim c As New Customer
c.DoSomething()
Output:
Customer
MyBase
Het sleutelwoord MyBase gedraagt zich als een objectvariabele die verwijst naar de basisklasse van de huidige instantie van een klasse.
Public Class Person
Public Sub DoSomething()
Console.WriteLine("Person")
End Sub
End Class
Public Class Customer
Inherits Person
Public Sub DoSomethingElse()
MyBase.DoSomething()
End Sub
End Class
Gebruiksvoorbeeld:
Dim p As New Person
p.DoSomething()
Console.WriteLine("----")
Dim c As New Customer
c.DoSomething()
c.DoSomethingElse()
Output:
Person
----
Person
Person
Me vs MyClass
Me gebruikt de huidige objectinstantie.
MyClass gebruikt de liddefinitie in de klasse waar het lid wordt genoemd
Class Person
Public Overridable Sub DoSomething()
Console.WriteLine("Person")
End Sub
Public Sub useMe()
Me.DoSomething()
End Sub
Public Sub useMyClass()
MyClass.DoSomething()
End Sub
End Class
Class Customer
Inherits Person
Public Overrides Sub DoSomething()
Console.WriteLine("Customer")
End Sub
End Class
Voorbeeld gebruik:
Dim c As New Customer
c.useMe()
c.useMyClass()
Output:
Customer
Person
overbelasting
Overbelasting is het maken van meer dan één procedure, instantieconstructor of eigenschap in een klasse met dezelfde naam maar verschillende argumenttypen.
Class Person
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
Overloads Sub Display(ByVal theDouble As Double)
' Add code that displays Double data.
End Sub
End Class
Shadows
Het geeft een lid opnieuw op dat niet overschreven kan worden. Alleen oproepen naar de instantie worden beïnvloed. Code binnen de basisklassen wordt hierdoor niet beïnvloed.
Public Class Person
Public Sub DoSomething()
Console.WriteLine("Person")
End Sub
Public Sub UseMe()
Me.DoSomething()
End Sub
End Class
Public Class Customer
Inherits Person
Public Shadows Sub DoSomething()
Console.WriteLine("Customer")
End Sub
End Class
Voorbeeld gebruik:
Dim p As New Person
Dim c As New Customer
p.UseMe()
c.UseMe()
Console.WriteLine("----")
p.DoSomething()
c.DoSomething()
Output:
Person
Person
----
Person
Customer
Valkuilen :
Voorbeeld 1, een nieuw object maken via een generiek. Welke functie wordt gebruikt ??
Public Sub CreateAndDoSomething(Of T As {Person, New})()
Dim obj As New T
obj.DoSomething()
End Sub
voorbeeld gebruik:
Dim p As New Person
p.DoSomething()
Dim s As New Student
s.DoSomething()
Console.WriteLine("----")
CreateAndDoSomething(Of Person)()
CreateAndDoSomething(Of Student)()
Output: Bij intuïtie moet het resultaat hetzelfde zijn. Toch is dat niet waar.
Person
Student
----
Person
Person
Voorbeeld 2:
Dim p As Person
Dim s As New Student
p = s
p.DoSomething()
s.DoSomething()
Output: door intuïtie zou je kunnen denken dat p en s gelijk zijn en zich gelijk zullen gedragen. Toch is dat niet waar.
Person
Student
In deze eenvoudige voorbeelden is het gemakkelijk om het vreemde gedrag van schaduwen te leren. Maar in het echt brengt het veel verrassingen met zich mee. Het is raadzaam om het gebruik van schaduwen te voorkomen. Men moet zoveel mogelijk andere alternatieven gebruiken (overschrijft enz ..)
interfaces
Public Interface IPerson
Sub DoSomething()
End Interface
Public Class Customer
Implements IPerson
Public Sub DoSomething() Implements IPerson.DoSomething
Console.WriteLine("Customer")
End Sub
End Class