VB.NET unterstützt die Operatorüberladung, was es ermöglicht, das Benutzerverhalten für Standardoperatoren (+, -, =, <, > usw.) bei der Arbeit mit benutzerdefinierten Typen zu definieren. Dies wird durch das Schlüsselwort Operator und die Deklaration einer speziellen Methode in einer Klasse oder Struktur erreicht.
Beispiel (Überladung des Operators "+"):
Public Structure Vector2D Public X As Double Public Y As Double Public Sub New(x As Double, y As Double) Me.X = x Me.Y = y End Sub Public Shared Operator +(a As Vector2D, b As Vector2D) As Vector2D Return New Vector2D(a.X + b.X, a.Y + b.Y) End Operator End Structure
Einschränkungen und Regeln:
Public Shared (statisch) definiert werden.= für Zuweisungen kann nicht überladen werden, sondern nur für Vergleiche).Fehler — Mehrdeutigkeit: Die Operatorüberladung macht den Code "magisch": Interviewteilnehmer könnten nicht erraten, warum benutzerdefinierte Objekte addiert werden.
Warum kann der Zuweisungsoperator ":=" oder "=" in Visual Basic .NET nicht überladen werden, sondern nur der Vergleichsoperator "="?
Antwort:
In VB.NET kann der Zuweisungsoperator (=) nicht überladen werden, nur der Vergleichsoperator. Dies entspricht der Semantik und Architektur der Sprache — die Regeln des grundlegenden Zuweisungsoperators zu überladen, ist nicht möglich, da dies die grundlegende Logik der Sprache verletzt. Der Vergleichsoperator (Gleichheit) kann jedoch für eigene Typen überladen werden:
Public Shared Operator =(a As MyClass, b As MyClass) As Boolean Return a.ID = b.ID End Operator
Geschichte
Geschichte
Geschichte
In einem Projekt mit Vektoralgebra wurden alle möglichen Operatoren überladen, einschließlich der Vergleiche, ohne auch GetHashCode und Equals zu implementieren. Hashtabellen und SortedList verhielten sich inkorrekt: Objekte wurden nicht nach Schlüsseln gesucht, die Arbeit der Sammlungen war gestört.