La using
directiva nos da acceso a los tipos sin usar sus nombres completos:
using MyNamespace.Foo.Bar;
La using
declaración actúa como azúcar sintáctica para try
/ finally
bloques que aseguran que los objetos se eliminen adecuadamente:
using(var x = new MyDisposableClass()) { ... }
Estas dos situaciones parecen no tener nada que ver entre sí. ¿Por qué usan la misma palabra clave?
Dudo que alguien pueda confundir los dos casos, pero parece extraño no crear una nueva palabra para una nueva funcionalidad.
Como comentario aparte, también he leído sobre el doble uso de class
en C ++ (uno para declarar clases, otro para definir parámetros de plantilla), pero el segundo caso finalmente obtuvo su propia palabra clave typename
, lo que tiene más sentido para mí.
var
siendo el ejemplo clásico donde un tipo dentro del alcance llamadovar
tiene prioridad sobre la palabra clave.g++ --std=c++11
, o permitir que los archivos de origen especifiquen un dialecto (como en Haskell (?), Racket, Perl, incluso Python). También se puede diseñar un idioma en de manera que las palabras clave no chocan con sintácticamente posibles identificadores, sin reservar algunos identificadores (aunque eso podría ser difícil para su implementación en el lenguaje de escorrentía la fábrica usando un analizador LALR con un analizador léxico delante).@using
Los diseñadores de idiomas generalmente intentan limitar la cantidad de palabras clave. Cuando se reserva una palabra clave, no se puede usar como un identificador en el código de usuario, lo cual es molesto si es solo la palabra que necesita. También es un obstáculo al portar código de otros idiomas, y Microsoft quería que las personas transfirieran código de Java a C #. C # tiene más palabras clave que Java, pero cada nueva palabra clave lo haría más difícil. Además, los idiomas .net están diseñados para interactuar con las API escritas en diferentes idiomas que pueden no tener las mismas palabras clave, lo que genera molestias si un miembro público también es una palabra clave.
Los dos usos de
using
son inequívocos, ya que aparecen en posiciones en la sintaxis, "usar" es un término apropiado en ambos casos. Por lo tanto, tiene sentido reutilizar la misma palabra clave. Observará otros ejemplos de reutilización de palabras clave, por ejemplo:new
en restricciones genéricasin
enforeach
y en parámetros de tipo variantedefault
como cláusula enswitch
y como operador (default(T)
).fuente