VB.NET перегружает доступ к массиву? - PullRequest
1 голос
/ 02 июня 2010

Можно ли перегрузить операторы доступа к массиву / dict в VB.net? Например, вы можете указать что-то вроде:

Dim mydict As New Hashtable()
mydict.add("Cool guy", "Overloading is dangerous!")
mydict("Cool guy") = "Overloading is cool!"

И это прекрасно работает. Но я хотел бы сказать:

mydict("Cool guy") = "3"

, а затем 3 автоматически преобразуются в целое число 3.

Я имею в виду, конечно, у меня может быть личный член mydict.coolguy и методы setCoolguy () и getCoolguy (), но я бы предпочел , чтобы иметь возможность написать его прежним способом, если это вообще возможно .

Спасибо


Чтобы уточнить - я хочу иметь возможность "делать вещи" со значением. Например, скажем, у меня есть

myclass.fizzlesticks ' String type
myclass.thingone     ' Numerical type, say integer

и тогда я хочу написать

myclass("thingummy") = "This is crazy"

, который запускает метод, который выглядит следующим образом

Private sub insanitea(Byval somarg as Object, Byval rhs as Object)
    If somearg = "thingummy" And rhs = "This is crazy" Then
        thingone = 4
        fizzlesticks = rhs & " and cool too!"
    End If
End Sub

Это не точный вариант использования, но я думаю, что он лучше иллюстрирует то, что я ищу?

Ответы [ 2 ]

2 голосов
/ 03 июня 2010

Нет, вы не можете перегрузить операторы доступа к массиву в Visual Basic.

В настоящее время можно перегрузить только следующие операторы:

Unary operators:
+   -   Not   IsTrue   IsFalse   CType

Binary operators:
+   -   *   /   \   &   Like   Mod   And   Or   Xor
^   <<   >>   =   <>   >   <   >=   <=
0 голосов
/ 02 июня 2010

Почему вы не можете сделать следующее:

mydict("Cool guy") = 3 //without quotes

Тогда вы можете сделать

dim x =  mydict("Cool guy") + 7

//x returns 10

Или вы можете сделать Int32.tryParse

dim x as integer
if int32.tryParse(mydict("Cool guy"), x) then
     return x + 7 //would return 10
end if
...