c# - name - web api project naming convention




Qual é o uso/significado do caractere @ em nomes de variáveis em C#? (6)

Descobri que você pode iniciar o nome da variável com um caractere '@' em C #. No meu projeto c # eu estava usando um serviço da web (eu adicionei uma referência da web para o meu projeto) que foi escrito em Java. Um dos objetos de interface definidos no WSDL tinha uma variável de membro com o nome "params". Obviamente, esta é uma palavra reservada em C #, então você não pode ter uma classe com uma variável de membro com o nome "params". O objeto proxy que foi gerado continha uma propriedade semelhante a esta:

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

Eu procurei pela documentação do VS 2008 c #, mas não consegui encontrar nada sobre isso. Também pesquisando no Google não me deu nenhuma resposta útil. Então, qual é o significado exato ou o uso do caractere '@' em um nome de variável / propriedade?


Ao contrário dos sigils de Perl, um prefixo @ antes de um nome de variável em C # não tem significado. Se x é uma variável, @x é outro nome para a mesma variável.

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

Mas o prefixo @ tem um uso , como você descobriu - você pode usá-lo para esclarecer nomes de variáveis ​​que o C # rejeitaria como ilegais.

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

> string @string;

Apenas permite que você use uma palavra reservada como um nome de variável. Não recomendado IMHO (exceto em casos como você tem).


Ele simplesmente permite que você use palavras reservadas como nomes de variáveis. Eu queria um var chamado event no outro dia. Eu estava indo com _event vez disso, mas meu colega me lembrou que eu poderia chamá-lo @event vez.


Em C #, o caractere at (@) é usado para denotar literais que explicitamente não aderem às regras relevantes na especificação de idioma.

Especificamente, ele pode ser usado para nomes de variáveis ​​que entram em conflito com palavras-chave reservadas (por exemplo, você não pode usar params, mas pode usar @params, mesmo com out / ref / qualquer outra palavra-chave na especificação de idioma). Além disso, ele pode ser usado para literais de string sem escape; isso é particularmente relevante com constantes de caminho, por exemplo, em vez de path = "c:\\temp\\somefile.txt" você pode escrever path = @"c:\temp\somefile.txt" . Também é muito útil para expressões regulares.


Outro caso de uso está nos métodos de extensão. O primeiro parâmetro especial pode ser distinguido para denotar seu significado real com @this name. Um exemplo:

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

        return @this[key];
    }

Se usarmos uma palavra-chave como o nome de um identificador, obtemos um erro do compilador "identificador esperado, 'Nome do identificador' é uma palavra-chave" Para superar esse erro, prefixar o identificador com "@". Esses identificadores são identificadores verbais. O caractere @ não faz parte do identificador, portanto, o identificador pode ser visto em outros idiomas como um identificador normal, sem o prefixo





specifications