C# 'dinâmico' palavra-chave... é realmente uma palavra RESERVADA, ou apenas um identificador que significa algo especial quando usado como tipo?

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

Pergunta

Eu tenho um C# 4.0 analisador.Ele aceita o 'dinâmico' como uma palavra-chave como um tipo.Minha analisador de viagens ao longo de instruções encontradas no trabalho do C# 3.0 programas de forma de:

dynamic = <exp> ;

Assim, é dinâmico realmente uma palavra-chave?Ou ele pode ainda ser usado como um identificador arbitrário nome?(Se afirmativo, por que não 'int' tratados da mesma maneira?)

Há uma referência de especificações em algum lugar que os estados se dinâmico é a palavra-chave?O mais recente ECMA para C#, 4 especificação não as menciona, "dinâmica", e o melhor que pode encontrar no MS site é um "pré-especificação", o que diz a sua palavra-chave, mas eu suspeito que apenas a escrita de forma descuidada.

Foi útil?

Solução

dynamic é uma palavra -chave contextual a partir de C# 4.0. A quarta edição da ECMA C# Spec não se refere ao C# 4.0. (Observe a data da publicação de 2006.)

Msdn descreve isso como uma palavra -chave.

Também está nisso Tabela de palavras -chave contextuais. (Rolar para baixo.)

Outras dicas

Não é um "normal" como palavra-chave if, for etc.

É um contextual palavra-chave como yield, from etc.

Em particular, este compila:

object dynamic = 0; // dynamic is a contextual keyword

mas isso não:

object string = 0; // string is a regular keyword

Você teria para "escapar" string como esta:

object @string = 0;

Isso faz muito sentido em termos de compatibilidade com versões anteriores:é pouco provável que muitas pessoas vão ter criado um tipo chamado dynamic (o que poderia causar ambiguidade;IIRC "real" do tipo ganha neste caso) considerando que é muito provável que o código existente utiliza variáveis chamado dynamic.

Em alguns aspectos, ela não precisa nem ser contextual de palavras-chave (e eu não acredito que a especificação explicitamente se refere a ele como tal) - você pode pensar nele como o nome de um tipo que está sempre disponível (como string e object).Imagino que string etc foram feitas de palavras-chave a partir de v1, para evitar a confusão, mas a adição de genuíno palavras-chave (que não podem ser usadas como identificadores) teria uma alta compatibilidade custo agora.

É uma palavra -chave. (Veja Editar abaixo) Estou um pouco confuso com o que você quer dizer com "Por que 'int' não é tratado da mesma maneira?"

Você não pode fazer isso: int int = 5;

Mas você pode fazer isso, embora não seja uma boa prática: int @int = 5;

o C# 4.0 especificações menciona dynamic Na Seção 20.1.

Editar: mais informações ...

Usar dinâmico como nome variável é permitido, por isso não é uma palavra -chave (mas é uma palavra -chave contextual - veja Postagem de Sean Devlin). Veja a captura de tela abaixo usando .NET 4.0 Beta

dynamic

Confira Chris Burrow's Postagem do blog. Uma citação interessante do post:

Como você pode ver, os membros publicamente visíveis que usam a dinâmica do tipo, na verdade, nos bastidores, usam o objeto Tipo quando forem emitidos. Não existe tipo de estrutura "dinâmico". No entanto, esses "objetos" são todos decorados de tal maneira que o compilador (ou qualquer outra pessoa) possa dizer que eles devem ser tratados dinamicamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top