Какое использование/значение символа @в именах переменных в С#?

Я обнаружил, что вы можете запустить свое имя переменной с символом '@' на С#. В моем проекте С# я использовал веб-службу (я добавил веб-ссылку на мой проект), написанный на Java. Один из объектов интерфейса, определенных в WSDL, имел переменную-член с именем "params". Очевидно, это зарезервированное слово в С#, поэтому вы не можете иметь класс с переменной-членом с именем "params". Прокси-объект, который был сгенерирован, содержит свойство, которое выглядит так:

public ArrayList @params {
    get { return this.paramsField; }
    set { this.paramsField = value; }
}

Я просмотрел документацию VS 2008 С#, но ничего не смог найти. Также поиск Google не дал мне полезных ответов. Итак, каково точное значение или использование символа "@" в имени переменной/свойства?

Ответ 1

Прямо от спецификации языка С#, идентификаторов (С#):

Префикс "@" позволяет использовать ключевые слова как идентификаторы, что полезно при взаимодействии с другими языками программирования. Символ @на самом деле не является частью идентификатора, поэтому идентификатор можно увидеть на других языках в качестве обычного идентификатора без префикса. Идентификатор с префиксом @называется стенографическим идентификатором.

Ответ 2

Он просто позволяет использовать зарезервированное слово в качестве имени переменной. Не рекомендуется IMHO (кроме случаев, подобных вам).

Ответ 3

В С# символ at (@) используется для обозначения литералов, которые явно не придерживаются соответствующих правил в спецификации языка.

В частности, он может использоваться для имен переменных, которые сталкиваются с зарезервированными ключевыми словами (например, вы не можете использовать параметры, но вместо этого вы можете использовать @params, то же самое с out/ref/любым другим ключевым словом в спецификации языка). Кроме того, он может использоваться для неизученных строковых литералов; это особенно важно для констант пути, например. вместо path = "c:\\temp\\somefile.txt" вы можете написать path = @"c:\temp\somefile.txt". Это также полезно для регулярных выражений.

Ответ 4

В отличие от синглов Perl префикс @ перед именем переменной в С# не имеет значения. Если x - переменная, @x - другое имя для той же переменной.

> string x = "abc";
> Object.ReferenceEquals(x, @x).Dump();
True

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

> string string;
Identifier expected; 'string' is a keyword

> string @string;

Ответ 5

Символ @ позволяет использовать зарезервированные ключевые слова для имени переменной. например @int, @string, @double и т.д.

Например:

string @public = "Reserved Keyword used for me and its fine";

Вышеприведенный код работает нормально, но ниже не будет работать:

string public = "This will not compile";

Ответ 6

Он просто позволяет использовать зарезервированные слова в качестве имен переменных. На днях я хотел использовать var под названием event. Я собирался пойти с _event вместо этого, но мой коллега напомнил мне, что я мог бы просто называть его @event.

Ответ 7

Другой вариант использования - в методах расширения. Первый особый параметр можно отличить от его реального значения с помощью @this name. Пример:

public static TValue GetValueOrDefault<TKey, TValue>(
    this IDictionary<TKey, TValue> @this,
    TKey key,
    TValue defaultValue)
    {
        if ([email protected](key))
        {
            return defaultValue;
        }

        return @this[key];
    }

Ответ 8

Если мы используем ключевое слово в качестве имени для идентификатора, мы получаем сообщение об ошибке "Идентификатор идентификатора", "Идентификатор имени - это ключевое слово" Чтобы преодолеть эту ошибку, префикс идентификатора с помощью "@". Такие идентификаторы являются стенографическими идентификаторами. Символ @на самом деле не является частью идентификатора, поэтому идентификатор можно увидеть на других языках в качестве обычного идентификатора без префикса

Ответ 9

Вы можете использовать его для использования зарезервированных ключевых слов в качестве имени переменной, например

 int @int = 3; 

компилятор будет игнорировать @ и скомпилировать переменную как int

Не рекомендуется использовать мысль