Разрешить математику в экземплярах моего класса - PullRequest
1 голос
/ 27 ноября 2010

Есть ли какой-нибудь интерфейс, который я могу реализовать, чтобы базовые сравнения и математика происходили как целые числа?

Например, допустим, у меня есть следующий класс:

Public Class Something
    Public SomeBigNumber as UInt64
End Class

Я бы хотел сделать что-то вроде этого:

Dim SomethingA, SomethingB, SomethingC as New Something

....

If (SomethingA-SomethingB) > SomethingC Then
    'Do stuff
End If

Я надеялся, что смогу реализовать какой-то интерфейс (если это даже правильный термин для него), который вернет UInt64, содержащийся в классе, для сравнения и математики, если это возможно.

Мысли? Заранее спасибо!

1 Ответ

4 голосов
/ 27 ноября 2010

То, что вы хотите сделать, называется «перегрузка операторов» , что позволяет вам определять операторы сравнения и математические операции для сложных типов (например, ваш класс Something).

Например, вы можете перегрузить операторы сложения и вычитания из вашего Something класса следующим образом:

Public Shared Operator +(ByVal val1 As Something, ByVal val2 As Something) As Something
    ''#(calculate the sum of the two specified values)
    Return New Something(val1.SomeBigNumber + val2.SomeBigNumber)
End Operator

Public Shared Operator -(ByVal val1 As Something, ByVal val2 As Something) As Something
    ''#(calculate the difference of the two specified values)
    Return New Something(val1.SomeBigNumber - val2.SomeBigNumber)
End Operator

И затем вы можете написать код, например:

Dim newValue As Something = something1 + something2


Вы также можете перегружать операторы сравнения (больше, меньше, равно, и все что между ними) почти одинаковым образом:

Public Shared Operator >(ByVal val1 As Something, ByVal val2 As Something) As Boolean
    ''#(return True if the first value is larger, False otherwise)
    Return (val1.SomeBigNumber > val2.SomeBigNumber)
End Operator

Public Shared Operator <(ByVal val1 As Something, ByVal val2 As Something) As Boolean
    ''#(return True if the first value is smaller, False otherwise)
    Return (val1.SomeBigNumber < val2.SomeBigNumber)
End Operator

Позволяя вам писать код, например:

If something1 > something2 Then
    MesssageBox.Show("The first value is larger.")
Else
    MessageBox.Show("The second value is larger.")
End If

Обратите внимание, однако, что некоторые из этих операторов должны быть перегружены в парах .В частности:

  • = и <>
  • > и <
  • >= и <=
  • IsTrue и IsFalse
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...