Что означает "@" char перед именем параметра в объявлении метода?
Возможные дубликаты:
Что означает символ @перед именем переменной в С#?
В чем смысл/смысл символа @в именах переменных на С#?
Привет,
У меня есть один быстрый вопрос. Что означает "@" char перед именем параметра в объявлении метода? Пример:
protected void Method1(Type1 @arg1, Type2 arg2)
...
Я использую С# с .net 3.5.
Спасибо.
Ответы
Ответ 1
Он позволяет использовать зарезервированные слова в качестве идентификаторов. Он обычно используется генераторами кода, которые могут использовать имена источников из систем с разными ключевыми словами, чем целевой язык, например. имена таблиц и имена аргументов sproc.
Ответ 2
Это способ избежать идентификатора.
например. следующие два эквивалентны:
protected void Method1(Type1 @arg1, Type2 arg2)
protected void Method1(Type1 arg1, Type2 arg2)
@
действительно полезно, если вам нужно указать идентификатор после ключевого слова. Ниже не будет компилироваться без @
:
protected void Method1(Type1 @class, Type2 arg2)
Ответ 3
Используется для зарезервированных слов в качестве параметров. Пример:
string @string = "abc";
или
string @class = "foo";
arg1
не является зарезервированным словом, поэтому использование @
не требуется. При этом использование зарезервированных слов для определения ваших параметров не является хорошей идеей. Бывают случаи, когда это полезно. Например, в ASP.NET MVC некоторые методы расширения HTML принимают анонимный объект в качестве параметра для извлечения атрибутов html. Итак, у вас есть синтаксис:
<%= Html.ActionLink("text", "action", "controller", null, new { @class = "abc" }) %>
который генерирует:
<a href="/controller/action" class="abc">text</a>
Ответ 4
В вашем конкретном примере это не имеет значения. В С# символ @используется для исключения ключевых слов, чтобы их можно было использовать как имена переменных.
Например, следующее генерирует ошибку компилятора:
public void Test(string class){...}
Но если вы сбегаете с @, это нормально:
public void Test(string @class){...}