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


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow