Действительно ли возможно перегрузить 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
Это не точный пример использования, но я думаю, что он делает лучшее задание способности проиллюстрировать то, что я ищу?
Нет, вы не можете перегрузить операторы доступа к массиву в Visual Basic.
В настоящее время единственные операторы, которые вы можете перегрузить:
Unary operators:
+ - Not IsTrue IsFalse CType
Binary operators:
+ - * / \ & Like Mod And Or Xor
^ << >> = <> > < >= <=
Почему вы не можете сделать следующее:
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