A using
diretiva nos dá acesso a tipos sem usar seus nomes totalmente qualificados:
using MyNamespace.Foo.Bar;
A using
declaração atua como açúcar sintático para try
/ finally
blocks, o que garante que os objetos sejam descartados adequadamente:
using(var x = new MyDisposableClass()) { ... }
Essas duas situações parecem não ter nada a ver uma com a outra. Por que eles usam a mesma palavra-chave?
Duvido que alguém possa confundir os dois casos, mas parece estranho não criar uma nova palavra para uma nova peça de funcionalidade.
Como um aparte, eu também li sobre o uso duplo do class
C ++ (um para declarar classes e outro para definir parâmetros de modelo), mas o segundo caso acabou por ter sua própria palavra-chave typename
, o que faz mais sentido para mim.
var
sendo o exemplo clássico em que um tipo no escopo chamadovar
tem precedência sobre a palavra-chave.g++ --std=c++11
, ou permitir que os arquivos de origem especifiquem um dialeto (como em Haskell (?), Racket, Perl e até Python) .Um idioma também pode ser projetado em de uma maneira que as palavras-chave nunca colidem sintaticamente com os possíveis identificadores, sem reservar alguns identificadores (embora isso possa ser difícil para a implementação da linguagem normal usando um analisador LALR com um lexer na frente).@using
Os designers de idiomas geralmente tentam limitar o número de palavras-chave. Quando uma palavra-chave é reservada, ela não pode ser usada como um identificador no código do usuário, o que é irritante se for apenas a palavra que você precisa. Também é um obstáculo ao transportar código de outros idiomas - e a Microsoft queria que as pessoas portassem código de Java para C #. O C # tem mais palavras-chave que Java, mas cada nova palavra-chave tornaria mais difícil. Além disso, as linguagens .net foram projetadas para interagir com as APIs escritas em diferentes linguagens que podem não ter as mesmas palavras-chave, o que leva a aborrecimentos se um membro público também for uma palavra-chave.
Os dois usos de
using
são inequívocos, uma vez que aparecem em posições na sintaxe, um "uso" é um termo apropriado nos dois casos. Portanto, faz sentido reutilizar a mesma palavra-chave. Você observará outros exemplos de reutilização de palavras-chave, por exemplo:new
em restrições genéricasin
foreach
parâmetros de tipo dentro e em variantedefault
como uma cláusulaswitch
e como um operador (default(T)
).fonte