2010-10-07 11 views
6

Per una determinata classe, con una proprietà predefinita di elenco, è possibile accedere a un oggetto istanza nell'elenco facendo myClass.defProperty ("chiave"). È inoltre possibile ottenere gli stessi risultati digitando myClass.defProperty! Key.Bang vs Proprietà predefinita in Visual Basic

Mi è stato detto che l'utilizzo della parentesi e virgolette è più veloce per il modo in cui il runtime accede alla proprietà, ma mi piacerebbe capire qual è la differenza e come fare ogni opera ...

ho capito C# ha un comportamento simile sostituendo la parentesi con parentesi quadre.

risposta

5

Dato il seguente codice in Visual Basic.NET:

Dim x As New Dictionary(Of String, String) 
x.Item("Foo") = "Bar" 

È possibile accedere al membro "Foo" del dizionario utilizzando uno dei seguenti:

Dim a = x!Foo 
Dim b = x("Foo") 
Dim c = x.Item("Foo") 

Se si guarda alla IL sotto Reflector.NET poi scoprirai che tutti si traducono in:

Dim a As String = x.Item("Foo") 
Dim b As String = x.Item("Foo") 
Dim c As String = x.Item("Foo") 

Quindi, sono tutti equivalenti t in IL e, naturalmente, tutti eseguono alla stessa velocità.

L'operatore bang consente solo l'utilizzo di chiavi definite staticamente conformi alle regole di denominazione delle variabili standard.

Utilizzando gli approcci indicizzati, le chiavi possono essere praticamente qualsiasi valore valido (in questo caso stringa) e è possibile utilizzare le variabili per rappresentare la chiave.

Per la leggibilità del codice, è consigliabile la notazione x.Item("Foo") poiché è molto chiaro su cosa sta succedendo. x("Foo") può essere confuso con una chiamata a una procedura e x!Foo rende il simile a una variabile e non a una stringa (che in realtà è). Anche la codifica a colori Overflow dello stack rende il Foo simile a una parola chiave!

L'equivalente C# per questo codice è x["Foo"];. Non esiste un equivalente di sintassi !.

Quindi, la linea di fondo è che ! non è migliore o peggiore sulle prestazioni e potrebbe rendere la manutenzione del codice più difficile, quindi dovrebbe essere evitata.

+0

Per riferimento futuro ... Ora mi sono reso conto che per il debugging il '!' È migliore perché consente di vedere il contenuto dell'elemento sull'indice corrente mentre si trova su un punto di interruzione mentre gli altri ti diranno 'non è possibile visualizza la proprietà indicizzata'. – PedroC88

Problemi correlati