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

StackOverflow https://stackoverflow.com/questions/91817

  •  01-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

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

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

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

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

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

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

> string @string;

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

Например:

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

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

string public = "This will not compile";

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

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

public static TValue GetValueOrDefault<TKey, TValue>(
    this IDictionary<TKey, TValue> @this,
    TKey key,
    TValue defaultValue)
    {
        if (!@this.ContainsKey(key))
        {
            return defaultValue;
        }

        return @this[key];
    }

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

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

 int @int = 3; 

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

использовать мысль - это не обычная практика

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top