2012-12-20 11 views
13

Właśnie zainstalowałem źródło referencyjne .NET 4.5 od firmy Microsoft, ponieważ próbuję rozwiązać problem, który widzę i natknąłem się na następujące informacje w dokumencie HttpApplication.cs.Czy "_ [....]" jest prawidłowym identyfikatorem?

// execution step -- call asynchronous event 
internal class AsyncEventExecutionStep : IExecutionStep { 
    private HttpApplication  _application; 
    private BeginEventHandler _beginHandler; 
    private EndEventHandler  _endHandler; 
    private Object    _state; 
    private AsyncCallback  _completionCallback; 
    private AsyncStepCompletionInfo _asyncStepCompletionInfo; // per call 
    private bool    _[....];   // per call 
    private string    _targetTypeStr; 

Informacja na temat następnej linii private bool _[....]; // per call.

Czy _[....] jest prawidłowym identyfikatorem (na dowolnym poziomie kompilacji, w tym IL) lub czy od czasu kompilacji zmieniono jego źródło?

+6

Oczywiście nie, lub czy nie próbował go skompilować? Kompilator zakłada, że ​​jest to niepoprawna deklaracja tablicy. –

+1

Nie można go skompilować, ponieważ źródło odniesienia nie zawiera pliku rozwiązania. Jestem prawie pewien, że to nie jest poprawny identyfikator w ** user-land ** C#, ale wiem, że kompilator generuje nazwy klas i tym podobne, których nie mogłem napisać w Visual Studio, stąd pytanie, czy jest ono ważne w dowolnym poziom kompilacji, w tym IL. –

+1

@Bobson MS wykonuje pewne czyszczenie źródła odniesienia, związane głównie z komentarzami. Zgadnij, że ich czystsze "wyczyszczone" trochę za dużo. – CodesInChaos

Odpowiedz

8

Nie; to nie jest ważne.

Przed udostępnieniem źródła firma Microsoft przeprowadziła go przez źle napisane wewnętrzne narzędzie, które zastępuje wszystkie nazwiska pracowników numerem [....].
Niestety, narzędzie zastępuje również faktyczne źródło.

Jest to faktycznie nieproduktywne; możesz dowiedzieć się, co właściwie było ukrytym źródłem, patrząc na skompilowane metadane (np. w Reflectorze).

Twój szczególności linia powinna być private bool _sync

+0

Dobry powód, żeby nie wymieniać zmiennej po sobie ... – Bobson

+2

Masz na myśli, że kod będzie nieczytelny, gdy tylko John Foo rozpocznie pracę w MS? ;) – igrimpe

+0

@igrimpe: Sądzę, że tylko nazwy użytkowników. – SLaks

3

Podczas @SLaks odpowiedź jest najprawdopodobniej poprawne, ważne jest, aby pamiętać, że jest to potencjalnie ważny identyfikator na poziomie IL, ECMA 335 Partycja II sekcja 5.3 stanowi:

[T] Składnia ILAsm pozwala na użycie dowolnego identyfikatora, który można utworzyć przy użyciu zestawu znaków Unicode (patrz Partycja I). Aby to osiągnąć, identyfikator należy umieścić w pojedynczym cudzysłowie.

Poniżej jest całkowicie poprawny IL który wypisuje na konsoli Fałsz:

.assembly 'ValidIDTest' 
{ 
} 

    .class public TestClass 
    { 
    .field static public bool '_[...]' 

    .method static void Main() cil managed 
    { 
     .entrypoint 
     ldsfld bool TestClass::'_[...]' 
     call void [mscorlib]System.Console::WriteLine(bool) 
     ret  
    } 
    } 
+0

@ Odpowiedź SLak jest poprawna. Pytanie to pojawiło się co najmniej dwukrotnie na SO i przynajmniej raz został odebrany przez pracownika Microsoftu z dostępem do narzędzia, ale jestem zbyt leniwy, aby znaleźć je w bankomacie. – Brian