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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow