2010-10-07 12 views
6

Dla danej klasy, z domyślną właściwością listy, można uzyskać dostęp do obiektu instancji na liście, wykonując myClass.defProperty ("klucz"). Możesz również osiągnąć te same wyniki, wpisując klucz myClass.defProperty!Bang vs Default Właściwość w języku Visual Basic

Powiedziano mi, że za pomocą nawiasów i cudzysłowów jest szybsze na drodze środowisko wykonawcze uzyskuje dostęp do nieruchomości, ale chciałbym zrozumieć, jaka jest różnica i jak każda praca ...

Rozumiem C# ma podobne zachowanie, zastępując nawias nawiasami kwadratowymi.

Odpowiedz

5

Biorąc pod uwagę następujący kod w Visual Basic.NET:

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

Możesz uzyskać dostęp do „foo” element słownika przy użyciu jednego z następujących powodów:

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

Jeśli spojrzeć na IL pod Reflector.NET, a następnie przekonasz się, że wszystkie są tłumaczone na:

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

Wszystkie są więc równoważne t w IL i, oczywiście, wszystkie one wykonują z tą samą prędkością.

Operator huk pozwala używać tylko zdefiniowanych statycznie kluczy, które są zgodne ze standardowymi regułami nazewnictwa zmiennych.

Stosując podejścia indeksowane, klucze mogą mieć prawie dowolną wartość prawidłową (w tym przypadku ciąg) i można używać zmiennych do reprezentowania klucza.

Dla czytelności kodu, polecam notację x.Item("Foo"), ponieważ jest bardzo jasne, co się dzieje. x("Foo") może być mylony z wywołaniem procedury i x!Foo powoduje, że Foo wygląda jak zmienna, a nie ciąg (który tak naprawdę jest). Nawet kodowanie kolorami Stack Overflow sprawia, że ​​Foo wygląda jak słowo kluczowe!

Odpowiednikiem C# dla tego kodu jest x["Foo"];. Nie ma równoważnika składni !.

Najważniejsze jest to, że ! nie jest lepszy ani gorszy pod względem wydajności i może utrudniać obsługę kodu, więc należy go unikać.

+0

Dla przyszłego odniesienia ... Teraz zdałem sobie sprawę, że dla celów debugowania '!' Jest lepsze, ponieważ pozwala zobaczyć zawartość elementu na bieżącym indeksie stojąc na punkcie przerwania, podczas gdy inni powiedzą "nie można zobacz indeksowaną właściwość'. – PedroC88

Powiązane problemy