VB.NET, перегружающий доступ к массиву?

Действительно ли возможно перегрузить array/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

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

1
задан Wayne Werner 2 June 2010 в 17:57
поделиться

2 ответа

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

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

Unary operators:
+   -   Not   IsTrue   IsFalse   CType

Binary operators:
+   -   *   /   \   &   Like   Mod   And   Or   Xor
^   <<   >>   =   <>   >   <   >=   <=
2
ответ дан 3 September 2019 в 00:06
поделиться

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

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
0
ответ дан 3 September 2019 в 00:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: