VB.NET, kendi türlerinizle çalışırken standart operatörler için ( +, -, =, <, >, vb.) kullanıcı tanımlı davranışlar tanımlamanıza olanak tanıyan operatör aşırı yüklemesini destekler. Bu, sınıf veya yapıda özel bir methodun tanımlanması ve Operator anahtar kelimesi ile gerçekleştirilir.
Örnek ("+" operatörünün aşırı yüklemesi):
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
Kısıtlamalar ve kurallar:
Public Shared (statik) olarak tanımlanmalıdır.= aşırı yüklenemez, yalnızca karşılaştırma için).Hata — belirsizlik: operatör aşırı yüklemesi kodu "büyülü" hale getirir: mülakatı yapanlar, neden kullanıcı tanımlı nesnelerin toplandığını anlamayabilir.
Neden atama operatörü ":=" veya "="'nin aşırı yüklenemediği, yalnızca karşılaştırma operatörü "="'nin aşırı yüklenebildiği Visual Basic .NET'te?
Cevap:
VB.NET'te atama operatörü (=) aşırı yüklenemez, yalnızca karşılaştırma operatörü. Bu, dilin mantığı ve mimarisiyle uyumludur — temel atama operatörünün çalışma kurallarını aşırı yüklemek mümkün değildir, çünkü bu dilin temel mantığını ihlal eder. Ancak, karşılaştırma (eşitlik) operatörünü kendi türleriniz için aşırı yükleyebilirsiniz:
Public Shared Operator =(a As MyClass, b As MyClass) As Boolean Return a.ID = b.ID End Operator
Tarihçe
Tarihçe
Tarihçe
Vektör cebiri projesinde, karşılaştırmalar da dahil olmak üzere tüm mümkün olan operatörler aşırı yüklendi, ayrıca GetHashCode ve Equals de uygulanmadı. Hash tabloları ve SortedList, yanlış davranmaya başladı: nesneler anahtarlarla aranmadı, koleksiyonların çalışması bozuldu.