Я искал ответ на подобную проблему, и в процессе я наткнулся на это здесь.
На самом деле ответ Джона указал мне направление, в котором я должен был идти. И это может помочь с исходным вопросом:
Моя проблема:
Мне нужно что-то, что я мог бы использовать, как целое число
Dim myVal as Integer
myVal = 15
If myVal = 15 then
...
End If
... и так далее ...
Однако мне нужны были и другие вещи
myVal.SomeReadOnlyProperty (as String)
myVal.SomeOtherReadOnlyProperty (as Integer)
(на самом деле эти свойства только для чтения также могут быть методами ...)
и т.д ... Так что мне действительно нужен был объект
Я думал о методах расширения для Integer (@ _ @) ... Я не хотел идти по этому пути ...
Я также подумал о том, чтобы написать «ReadOnlyPropertyOracle» как отдельный класс и дать ему такие методы, как
GetSomeReadOnlyProperty(ByVal pVal as Integer) as String
GetSomeOtherReadOnlyProperty(ByVal pVal as Integer) as Integer
weeeell .... Это бы сработало, но выглядело ужасно ...
Итак, появился комментарий Джона Хака и Брайана Маккея об операторах:
Комбинируя расширяющие / сужающие операторы преобразования (для присваивания) и операторы сравнения для ... сравнения скважин.
Вот часть моего кода, и он делает то, что мне нужно:
'The first two give me the assignment operator like John suggested
Public Shared Widening Operator CType(ByVal val As Integer) As MySpecialIntType
Return New MySpecialIntType(val)
End Operator
'As opposed to John's suggestion I think this should be Narrowing?
Public Shared Narrowing Operator CType(ByVal val As MySpecialIntType) As Integer
Return val.Value
End Operator
'These two give me the comparison operator
'other operators can be added as needed
Public Shared Operator =(ByVal pSpecialTypeParameter As MySpecialIntType, ByVal pInt As Integer) As Boolean
Return pSpecialTypeParameter.Value = pInt
End Operator
Public Shared Operator <>(ByVal pSpecialTypeParameter As MySpecialIntType, ByVal pInt As Integer) As Boolean
Return pSpecialTypeParameter.Value <> pInt
End Operator
Да, это все еще будет 1-2 дюжины однострочных определений операторов, но большинство из них тривиальны с небольшим пространством для ошибок ;-) Так что это работает для меня ...