Operator Overloading and Conversions
Overloadable: + - * / \ ^ & Mod Not And Or Xor << >> = <> < > <= >= Like IsTrue IsFalse CType.
Comparison operators must be defined in pairs (=/<>, </>, <=/>=).
Public Structure Money
Public ReadOnly Property Amount As Decimal
Public ReadOnly Property Currency As String
Public Sub New(amount As Decimal, currency As String)
Me.Amount = amount
Me.Currency = currency
End Sub
Public Shared Operator +(a As Money, b As Money) As Money
If a.Currency <> b.Currency Then Throw New InvalidOperationException("Currency mismatch")
Return New Money(a.Amount + b.Amount, a.Currency)
End Operator
Public Shared Operator *(a As Money, factor As Decimal) As Money
Return New Money(a.Amount * factor, a.Currency)
End Operator
Public Shared Operator =(a As Money, b As Money) As Boolean
Return a.Amount = b.Amount AndAlso a.Currency = b.Currency
End Operator
Public Shared Operator <>(a As Money, b As Money) As Boolean ' = and <> must come in pairs
Return Not (a = b)
End Operator
Public Shared Operator >(a As Money, b As Money) As Boolean
Return a.Amount > b.Amount
End Operator
Public Shared Operator <(a As Money, b As Money) As Boolean
Return a.Amount < b.Amount
End Operator
Public Shared Widening Operator CType(amoun
…