Что означает символ @ перед именем переменной в C#?

Possible Duplicate:
What's the use/meaning of the @ character in variable names in C#?

Я понимаю, что символ @ можно использовать перед строковым литералом, чтобы изменить способ анализа строки компилятором. Но что это значит, когда имя переменной начинается с символа @?

см. stackoverflow.com/questions/91817

Simon 16.06.2009 12:02
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
550
1
202 018
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Символ @ позволяет использовать зарезервированное слово. Например:

int @class = 15;

Вышеупомянутое работает, когда нижеследующее не работает:

int class = 15;

Чем он отличается, скажем, от подчеркивания?

Vilx- 09.01.2009 23:15

С символом @ имя записывается в сборке как «класс», а с подчеркиванием - «_class». Таким образом, если другой язык .NET не определяет «класс» как зарезервированное слово, они могут использовать имя просто «класс».

P Daddy 09.01.2009 23:23

Если вы использовали @class для имени свойства, вы могли бы получить к нему доступ так: MyClass.class вместо MyClass._class

John Sheehan 09.01.2009 23:24

Думаю, я мог ошибаться, в таком случае удалите свой комментарий

John Sheehan 09.01.2009 23:24

Джон, в Delphi ваш комментарий точен. Полностью определенные имена не требуют экранирования символов "@" или "&". Хотя насчет C# не уверен.

Rob Kennedy 09.01.2009 23:49

Он также проявляется как просто «класс» при использовании отражения.

Joel Coehoorn 10.01.2009 00:00

Вы не должны ставить перед общедоступными членами знак подчеркивания, так как не все языки .Net поддерживают его.

Keith 10.01.2009 00:22

@ Роб: Джон прав. @ Майкл: Хорошее простое объяснение. +1

Jeff Yates 10.03.2009 22:43

Когда вы думаете, что знаете все, что нужно знать о C#, вы узнаете что-то новое. :)

Randolpho 09.12.2009 23:19

@ Vilx - В ASP.net MVC его очень часто используют, потому что это единственный способ выразить некоторые вещи. Например, если вы хотите установить атрибут класса элемента, вы должны ввести new { @class = "mc" };, даже если вы имели в виду просто «класс», это единственный способ. Я пытаюсь подчеркнуть, что @ является частью нет фактического имени переменной.

MasterMastic 02.03.2013 17:09

@Ken - Спасибо, уже 4 года назад получил. :)

Vilx- 02.03.2013 17:31

Вопреки комментариям некоторых людей, это весьма полезно. У меня был WSDL, который определял имя элемента как «return», и это позволяло мне заполнять его без отражения (это то, что я задумал).

JohnOpincar 08.08.2017 21:39

Вот ссылка на официальную документацию Microsoft о @character - docs.microsoft.com/en-us/dotnet/csharp/language-reference/…

broadband 02.11.2018 11:36

Он позволяет использовать ключевое слово 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"

То, как он влияет на струны, было именно тем, что я искал. Спасибо!

Scott 09.03.2011 18:24

Спасибо, использование @ для строк было именно тем, что я искал

Oliver 07.11.2012 14:17

Вам по-прежнему нужно избегать двойных кавычек, удваивая их.

Justin Skiles 29.01.2014 23:32

Если вы поместите @ перед строковым литералом, это называется «дословным строковым литералом».

Kamran Bigdely 01.04.2014 21:43

В MSDN есть статья о дословных строковых литералах (@ "hello"): msdn.microsoft.com/en-us/library/aa691090%28v=vs.71%29.aspx

Kamran Bigdely 01.04.2014 21:47

Это лучший ответ ИМО

But I'm Not A Wrapper Class 25.06.2014 23:56

@CyberneticTwerkGuruOrc Хотя это более подробный ответ, он выходит за рамки того, что задал OP, отмеченный ответ касается конкретной проблемы @ при использовании с переменными и, следовательно, (IMO) является более верный ответом.

Mike 17.03.2015 11:10

Обратите внимание, что в Visual Studio 2015 и более поздних версиях $"a string" позволяет интерполяцию значений. Итак, string.Format("Your value is {0}.", value) теперь может быть $"Your value is \"{value}\".". Вы можете комбинировать их, чтобы использовать интерполяцию буквальных строк, как в $@"Your value is ""{value}"".". (Обратите внимание на разницу в экранировании двойных кавычек в каждой версии.)

ErikE 26.01.2016 02:31

Это правильный ответ!

Erdinc Ay 06.09.2017 10:40

Важный момент, о котором забыли другие ответы, заключается в том, что «@keyword» компилируется в «ключевое слово» в CIL.

Так что если у вас есть фреймворк, созданный, скажем, на F#, который требует, чтобы вы определяли класс со свойством с именем «class», вы действительно можете это сделать.

что бесполезен на практике, но его отсутствие может помешать C# в некоторых формах языкового взаимодействия.

Я обычно вижу, что он используется не для взаимодействия, а для того, чтобы избежать ограничений ключевых слов (обычно для имен локальных переменных, где это эффект Только), т.е.

private void Foo(){
   int @this = 2;
}

но я бы категорически не одобрял этого! Просто найдите другое имя, даже если «лучшее» имя для переменной - одно из зарезервированных имен.

Наверное, это хороший совет. Я считать, что квалификатор @ является эквивалентом квадратной скобки VB.Net, поэтому эквивалент VB будет: dim [Class] as Int32 = 15

Michael Meadows 10.01.2009 00:01

@Michael Это точный эквивалент синтаксиса квадратных скобок VB.NET. stackoverflow.com/questions/6639688/… отмечает, что F# использует двойные обратные кавычки вокруг идентификатора с той же целью.

ClickRick 21.12.2014 14:14

В качестве позднего комментария - «не то, чтобы это НАСТОЛЬКО полезно» - в MVC вы можете передать свойство с именем «class» в рендер e, который превращается в html «class» для определения класса CSS.

TomTom 27.02.2016 21:00

Другие вопросы по теме