2010-06-02 2 views
1

Можно ли перегрузить операторы доступа к массиву/типу в VB.net? Например, вы можете указать что-то вроде: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 автомагическов преобразованы в Integer 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 

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

+0

я принял удар на то, что вы просите, но не уверен, что название этого вопроса и то, что я прочитал coorespond. Дайте мне знать, если я ухожу отсюда. – Tommy

+0

Это, наверное, так же точно, как и в моем примере, и если это все, что мне нужно, то ваше решение будет работать отлично. Мне просто нужно немного более сложное поведение в моем классе, то есть при назначении я хочу иметь возможность преобразовывать значения, если они еще не являются тем, чем они должны быть. Если это имеет смысл ... –

ответ

2

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

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

Unary operators: 
+ - Not IsTrue IsFalse CType 

Binary operators: 
+ - * / \ & Like Mod And Or Xor 
^ << >> = <> > < >= <= 
0

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

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 
Смежные вопросы