2013-04-09 22 views
11

Mam ten kod po dekompilacjiCo oznacza symbol <> w MSIL?

SampleClass sampleClass; 
    SampleClass <>g__initLocal0; 
    int y; 
    sampleClass = null; 
Label_0018: 
    try 
    { 
     <>g__initLocal0 = new SampleClass(); 
     <>g__initLocal0.X = 5; 
     <>g__initLocal0.Y = 10; 
     sampleClass = <>g__initLocal0; 
     goto Label_003A; 
    } 
    catch (Exception) 
    { 
    Label_0035: 
     goto Label_003A; 
    } 
Label_003A: 
    y = sampleClass.Y; 

nie wiem co znaczy Operator/symbol <> Zanim niektórych operacji. Czy ktoś wie?

Odpowiedz

13

Jest to nazwa wygenerowana przez kompilator - znaki <> są legalne dla identyfikatorów w IL, ale nie w C#. Tak więc kompilator wie, że może generować nazwy zawierające takie znaki bez żadnej szansy, że nazwa będzie kolidować z nazwą używaną w kodzie.

W tym konkretnym przypadku <>g__initLocal0 jest nową zmienną, która została wprowadzona do przechowywania nowo utworzonej instancji klasy, która jest inicjowana za pomocą initializer syntax. Oryginalny kodowym:

sampleClass = new SampleClass() { X = 5, Y = 10}; 

Jest wprowadzony do uniknięcia sampleClass obserwowane z częściowo konstruowanej przykład - po new SampleClass() wykonał ale przed wystąpieniem przypisania do X i Y. To znaczy. jeśli Y = 10 zgłasza wyjątek, zapewnia to, że sampleClass pozostaje null, a nie nowy SampleClass z X ustawionym na 5 i nieznaną wartością dla Y.

+1

Aby uzyskać informacje o tym, jak dokładnie zostały utworzone te nazwy, zobacz [odpowiedź Erica Lipperta] (http://stackoverflow.com/a/2509524/41071). – svick