Possible Duplicate:
What's the use/meaning of the @ character in variable names in C#?
Я понимаю, что символ @ можно использовать перед строковым литералом, чтобы изменить способ анализа строки компилятором. Но что это значит, когда имя переменной начинается с символа @?





Символ @ позволяет использовать зарезервированное слово. Например:
int @class = 15;
Вышеупомянутое работает, когда нижеследующее не работает:
int class = 15;
Чем он отличается, скажем, от подчеркивания?
С символом @ имя записывается в сборке как «класс», а с подчеркиванием - «_class». Таким образом, если другой язык .NET не определяет «класс» как зарезервированное слово, они могут использовать имя просто «класс».
Если вы использовали @class для имени свойства, вы могли бы получить к нему доступ так: MyClass.class вместо MyClass._class
Думаю, я мог ошибаться, в таком случае удалите свой комментарий
Джон, в Delphi ваш комментарий точен. Полностью определенные имена не требуют экранирования символов "@" или "&". Хотя насчет C# не уверен.
Он также проявляется как просто «класс» при использовании отражения.
Вы не должны ставить перед общедоступными членами знак подчеркивания, так как не все языки .Net поддерживают его.
@ Роб: Джон прав. @ Майкл: Хорошее простое объяснение. +1
Когда вы думаете, что знаете все, что нужно знать о C#, вы узнаете что-то новое. :)
@ Vilx - В ASP.net MVC его очень часто используют, потому что это единственный способ выразить некоторые вещи. Например, если вы хотите установить атрибут класса элемента, вы должны ввести new { @class = "mc" };, даже если вы имели в виду просто «класс», это единственный способ. Я пытаюсь подчеркнуть, что @ является частью нет фактического имени переменной.
@Ken - Спасибо, уже 4 года назад получил. :)
Вопреки комментариям некоторых людей, это весьма полезно. У меня был WSDL, который определял имя элемента как «return», и это позволяло мне заполнять его без отражения (это то, что я задумал).
Вот ссылка на официальную документацию Microsoft о @character - docs.microsoft.com/en-us/dotnet/csharp/language-reference/…
Он позволяет использовать ключевое слово C# в качестве переменной. Например:
class MyClass
{
public string name { get; set; }
public string @class { get; set; }
}
В C# символ @ служит двум целям:
Во-первых, он позволяет использовать зарезервированное ключевое слово в качестве переменной, например:
int @int = 15;
Второй вариант позволяет указать строку без необходимости экранирования каких-либо символов. Например, символ '\' является escape-символом, поэтому обычно вам нужно сделать следующее:
var myString = "c:\\myfolder\\myfile.txt"
в качестве альтернативы вы можете сделать это:
var myString = @"c:\myFolder\myfile.txt"
То, как он влияет на струны, было именно тем, что я искал. Спасибо!
Спасибо, использование @ для строк было именно тем, что я искал
Вам по-прежнему нужно избегать двойных кавычек, удваивая их.
Если вы поместите @ перед строковым литералом, это называется «дословным строковым литералом».
В MSDN есть статья о дословных строковых литералах (@ "hello"): msdn.microsoft.com/en-us/library/aa691090%28v=vs.71%29.aspx
Это лучший ответ ИМО
@CyberneticTwerkGuruOrc Хотя это более подробный ответ, он выходит за рамки того, что задал OP, отмеченный ответ касается конкретной проблемы @ при использовании с переменными и, следовательно, (IMO) является более верный ответом.
Обратите внимание, что в Visual Studio 2015 и более поздних версиях $"a string" позволяет интерполяцию значений. Итак, string.Format("Your value is {0}.", value) теперь может быть $"Your value is \"{value}\".". Вы можете комбинировать их, чтобы использовать интерполяцию буквальных строк, как в $@"Your value is ""{value}"".". (Обратите внимание на разницу в экранировании двойных кавычек в каждой версии.)
Это правильный ответ!
Важный момент, о котором забыли другие ответы, заключается в том, что «@keyword» компилируется в «ключевое слово» в CIL.
Так что если у вас есть фреймворк, созданный, скажем, на F#, который требует, чтобы вы определяли класс со свойством с именем «class», вы действительно можете это сделать.
что бесполезен на практике, но его отсутствие может помешать C# в некоторых формах языкового взаимодействия.
Я обычно вижу, что он используется не для взаимодействия, а для того, чтобы избежать ограничений ключевых слов (обычно для имен локальных переменных, где это эффект Только), т.е.
private void Foo(){
int @this = 2;
}
но я бы категорически не одобрял этого! Просто найдите другое имя, даже если «лучшее» имя для переменной - одно из зарезервированных имен.
Наверное, это хороший совет. Я считать, что квалификатор @ является эквивалентом квадратной скобки VB.Net, поэтому эквивалент VB будет: dim [Class] as Int32 = 15
@Michael Это точный эквивалент синтаксиса квадратных скобок VB.NET. stackoverflow.com/questions/6639688/… отмечает, что F# использует двойные обратные кавычки вокруг идентификатора с той же целью.
В качестве позднего комментария - «не то, чтобы это НАСТОЛЬКО полезно» - в MVC вы можете передать свойство с именем «class» в рендер e, который превращается в html «class» для определения класса CSS.
см. stackoverflow.com/questions/91817