VB.NET wspiera przeciążenie operatorów, co pozwala na zdefiniowanie specyficznego zachowania dla standardowych operatorów (+, -, =, <, > itd.) przy pracy z własnymi typami. Osiąga się to za pomocą słowa kluczowego Operator i zadeklarowania specjalnej metody w klasie lub strukturze.
Przykład (przeciążenie operatora "+"):
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
Ograniczenia i zasady:
Public Shared (statyczne).= dla przypisania, tylko dla porównania).Błąd — dwuznaczność: przeciążenie operatorów czyni kod "magiczny": rozmówcy mogą nie domyślić się, dlaczego dodają się obiekty niestandardowe.
Dlaczego nie można przeciążyć operatora przypisania ":=" lub "=", a tylko operatora porównania "=" w Visual Basic .NET?
Odpowiedź:
W VB.NET operator przypisania (=) nie może być przeciążany, tylko operator porównania. To odpowiada semantyce i architekturze języka — nie można przeciążać zasad działania podstawowego operatora przypisania, ponieważ narusza to podstawową logikę języka. Z kolei operator porównania (równości) można przeciążać dla własnych typów:
Public Shared Operator =(a As MyClass, b As MyClass) As Boolean Return a.ID = b.ID End Operator
Historia
Historia
Historia
W projekcie z algebrą wektorową przeciążono wszystkie możliwe operatory, w tym porównania, nie realizując również GetHashCode i Equals. Tabele haszujące i SortedList zaczęły zachowywać się nieprawidłowo: obiekty nie były wyszukiwane po kluczach, co zakłócało działanie kolekcji.