2011-01-19 15 views
13

Possible Duplicates:
What does the @ symbol before a variable name mean in C#?
What's the use/meaning of the @ character in variable names in C#?Co oznacza znak "@" przed nazwą parametru w deklaracji metody?

Cześć,

Mam jedno krótkie pytanie. Co oznacza znak "@" przed nazwą parametru w deklaracji metody? Podobnie jak następujące:

protected void Method1(Type1 @arg1, Type2 arg2) 
... 

Używam C# z .net 3.5.

Dzięki.

+1

Jest to znak, że ucieczka pozwala używać słów zastrzeżonych jako identyfikatorów. To pytanie jest często zadawane. Zobacz: http://stackoverflow.com/questions/429529/what-does-the-symbol-before-a-vargeble-name-mean-in-c –

Odpowiedz

16

Pozwala na użycie słów zarezerwowanych jako identyfikatorów. Zwykle jest używany przez generatory kodu, które mogą używać nazw źródłowych z systemów o różnych słowach kluczowych niż język docelowy, np. nazwy tabel i nazwy argumentów sproc.

+1

'arg1' jest zastrzeżonym słowem? – BoltClock

+1

@BoltClock: Tak, czasami używa się go niepotrzebnie. Mogę sobie tylko wyobrazić programistę, który pierwotnie to robi, nie ma pojęcia, co to znaczy, ale zobaczył to gdzieś i pomyślał, że wygląda fajnie. Lub, jak pokazuje odpowiedź, czasami robią to automatyczne generatory kodu. –

+1

@BoltClock Nie, nie jest, ale generator kodu nie wie o tym.Generatory kodów często umieszczają symbol @ przed wszystkimi identyfikatorami. –

7

Jest to sposób na uniknięcie identyfikatora.

E.g. następujące dwa są równoważne:

protected void Method1(Type1 @arg1, Type2 arg2) 
protected void Method1(Type1 arg1, Type2 arg2) 

@ jest tylko bardzo przydatny, jeśli trzeba wymienić identyfikator po słowa kluczowego. Poniższa nie skompilować bez @:

protected void Method1(Type1 @class, Type2 arg2)

1

dla konkretnego przykładu, to nie ma sensu. W języku C# symbol @ jest używany do unikania słów kluczowych, aby mogły być używane jako nazwy zmiennych.

Na przykład, następujące wygeneruje błąd kompilatora:

public void Test(string class){...} 

Ale jeśli uciec z @, to jest w porządku:

public void Test(string @class){...} 
2

Służy do zastrzegły słowa jako parametry. Przykład:

string @string = "abc"; 

czyli

string @class = "foo"; 

arg1 nie jest słowem zarezerwowanym więc korzystanie @ nie jest konieczne. W związku z tym używanie słów zarezerwowanych do nadawania nazw parametrom nie jest dobrym pomysłem. Są jednak przypadki, w których jest to przydatne. Na przykład w ASP.NET MVC niektóre metody rozszerzenia HTML pobierają obiekt anonimowy jako parametr do emisji atrybutów html. Więc trzeba składnię tak:

<%= Html.ActionLink("text", "action", "controller", null, new { @class = "abc" }) %> 

który generuje:

<a href="/controller/action" class="abc">text</a> 
Powiązane problemy