Visual Basic .NET Language
OOP-Schlüsselwörter
Suche…
Klasse definieren
Klassen sind wesentliche Aspekte von OOP. Eine Klasse ist wie der "Bauplan" eines Objekts. Ein Objekt hat die Eigenschaften einer Klasse, aber die Merkmale werden nicht in der Klasse selbst definiert. Da jedes Objekt unterschiedlich sein kann, definieren sie ihre eigenen Merkmale.
Public Class Person
End Class
Public Class Customer
End Class
Eine Klasse kann auch Unterklassen enthalten. Eine Unterklasse erbt die gleichen Eigenschaften und Verhaltensweisen wie ihre übergeordnete Klasse, kann jedoch eigene eindeutige Eigenschaften und Klassen haben.
Vererbungsmodifikatoren (für Klassen)
Erbt
Gibt die Basisklasse (oder übergeordnete Klasse) an
Public Class Person
End Class
Public Class Customer
Inherits Person
End Class
'One line notation
Public Class Student : Inherits Person
End Class
Mögliche Objekte:
Dim p As New Person
Dim c As New Customer
Dim s As New Student
Nicht vererbbar
Verhindert, dass Programmierer die Klasse als Basisklasse verwenden.
Public NotInheritable Class Person
End Class
Mögliche Objekte:
Dim p As New Person
MustInherit
Gibt an, dass die Klasse nur als Basisklasse verwendet werden soll. (Abstrakte Klasse)
Public MustInherit Class Person
End Class
Public Class Customer
Inherits Person
End Class
Mögliche Objekte:
Dim c As New Customer
Vererbungsmodifikatoren (zu Eigenschaften und Methoden)
Überschreibbar
Ermöglicht das Überschreiben einer Eigenschaft oder Methode in einer Klasse in einer abgeleiteten Klasse.
Public Class Person
Public Overridable Sub DoSomething()
Console.WriteLine("Person")
End Sub
End Class
Überschreibungen
Überschreibt eine überschreibbare Eigenschaft oder Methode, die in der Basisklasse definiert ist.
Public Class Customer
Inherits Person
'Base Class must be Overridable
Public Overrides Sub DoSomething()
Console.WriteLine("Customer")
End Sub
End Class
Nichtüberwindbar
Verhindert, dass eine Eigenschaft oder Methode in einer erbenden Klasse überschrieben wird. Standardverhalten Kann nur bei Überschreibungsmethoden deklariert werden
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
Verwendungsbeispiel:
Dim p As New Person
p.DoSomething()
Dim c As New Customer
c.DoSomething()
Dim d As New DetailedCustomer
d.DoSomething()
Ausgabe:
Person
Customer
Customer
MustOverride
Erfordert, dass eine abgeleitete Klasse die Eigenschaft oder Methode überschreibt.
MustOverride-Methoden müssen in MustInherit-Klassen deklariert werden.
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
Verwendungsbeispiel:
Dim c As New Customer
c.DoSomething()
Ausgabe:
Customer
MyBase
Das MyBase-Schlüsselwort verhält sich wie eine Objektvariable, die auf die Basisklasse der aktuellen Instanz einer Klasse verweist.
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
Anwendungsbeispiel:
Dim p As New Person
p.DoSomething()
Console.WriteLine("----")
Dim c As New Customer
c.DoSomething()
c.DoSomethingElse()
Ausgabe:
Person
----
Person
Person
Ich gegen MyClass
Ich verwendet die aktuelle Objektinstanz.
MyClass verwendet die Memberdefinition in der Klasse, in der der Member aufgerufen wird
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
Verwendungsbeispiel:
Dim c As New Customer
c.useMe()
c.useMyClass()
Ausgabe:
Customer
Person
Überlastung
Überladen ist das Erstellen von mehr als einer Prozedur, einem Instanzkonstruktor oder einer Eigenschaft in einer Klasse mit demselben Namen, aber unterschiedlichen 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
Schatten
Es deklariert ein Mitglied, das nicht überschrieben werden kann. Nur Aufrufe an die Instanz sind betroffen. Code innerhalb der Basisklassen wird davon nicht betroffen.
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
Verwendungsbeispiel:
Dim p As New Person
Dim c As New Customer
p.UseMe()
c.UseMe()
Console.WriteLine("----")
p.DoSomething()
c.DoSomething()
Ausgabe:
Person
Person
----
Person
Customer
Fallstricke :
Beispiel1, Erstellen eines neuen Objekts durch ein generisches Objekt. Welche Funktion wird verwendet?
Public Sub CreateAndDoSomething(Of T As {Person, New})()
Dim obj As New T
obj.DoSomething()
End Sub
Verwendungsbeispiel:
Dim p As New Person
p.DoSomething()
Dim s As New Student
s.DoSomething()
Console.WriteLine("----")
CreateAndDoSomething(Of Person)()
CreateAndDoSomething(Of Student)()
Ausgabe: Nach Intuition sollte das Ergebnis das gleiche sein. Das stimmt aber nicht.
Person
Student
----
Person
Person
Beispiel 2
Dim p As Person
Dim s As New Student
p = s
p.DoSomething()
s.DoSomething()
Ausgabe: Durch Intuition könnten Sie denken, dass p und s gleich sind und sich gleich benehmen. Das stimmt aber nicht.
Person
Student
In diesen einfachen Beispielen ist es leicht, das merkwürdige Verhalten von Schatten zu lernen. Im wirklichen Leben bringt es jedoch viele Überraschungen. Es ist ratsam, die Verwendung von Schatten zu verhindern. Man sollte so viele Alternativen wie möglich verwenden (Überschreibungen usw.).
Schnittstellen
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