VB.NETは演算子のオーバーロードをサポートしており、カスタム型を操作するときに標準演算子(+, -, =, <, >など)のユーザー定義の振る舞いを定義できます。これは、Operatorというキーワードを使って、クラスまたは構造体内に特別なメソッドを宣言することで実現されます。
例(演算子"+"のオーバーロード):
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
制約と規則:
Public Shared(静的)として定義されます。=はオーバーロードできず、比較のためのものだけが可能です)。エラー - 曖昧さ: 演算子のオーバーロードはコードを"魔法のように"します:面接官はユーザーオブジェクトがなぜ足し算されるのか理解できないかもしれません。
なぜVB.NETでは代入演算子":="や"="をオーバーロードできず、比較演算子"="のみがオーバーロードできるのか?
回答:
VB.NETでは代入演算子(=)はオーバーロードできず、比較演算子のみが可能です。これは言語のセマンティクスとアーキテクチャに準拠しています — 基本的な代入演算子の動作規則をオーバーロードできないのは、言語の基本的なロジックを破壊するからです。しかし、比較(等価性)の演算子は自分の型のためにオーバーロード可能です:
Public Shared Operator =(a As MyClass, b As MyClass) As Boolean Return a.ID = b.ID End Operator
ストーリー
ストーリー
ストーリー
ベクトル代数のプロジェクトで、すべての可能な演算子をオーバーロードし、比較も行ったが、GetHashCodeとEqualsも実装しませんでした。ハッシュテーブルとSortedListが正しく動作しなくなり、オブジェクトがキーで検索できず、コレクションの動作が壊れました。