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(静态)。= 用于赋值,仅用于比较)。错误 — 歧义性: 操作符重载使代码变得 "神奇": 面试者可能无法猜到为什么用户自定义对象可以相加。
为什么在 Visual Basic .NET 中无法重载赋值操作符 ":=" 或 "=",而只能重载比较操作符 "="?
答案:
在 VB.NET 中,赋值操作符 (=) 不能被重载,只有比较操作符可以。这符合语言的语义和架构 — 无法重载基本赋值操作符的规则,因为这违反了语言的基本逻辑。而比较操作符(相等性)则可以为自定义类型重载:
Public Shared Operator =(a As MyClass, b As MyClass) As Boolean Return a.ID = b.ID End Operator
背景故事
背景故事
背景故事
在一个向量代数项目中,重载了 所有 可能的操作符,包括比较,没有实现 GetHashCode 和 Equals。哈希表和 SortedList 的行为变得不正确:对象无法按键查找,集合的工作也受到影响。