Importación de espacios de nombres nesteds automáticamente en C #

Lo siento si esta pregunta ya fue hecha. Empecé a estudiar C # y noté que C # no importa espacios de nombres nesteds automáticamente. No entiendo:

using System; 

debería importar automáticamente todas las clases contenidas en el espacio de nombres del sistema ¿verdad? Entonces no debería haber necesidad de escribir

 using System.Windows.Form; 

Lo entendería si using Windows.Form incluso funcionó. ¡Pero el comstackdor no pudo resolverlo! ¿Cuál es el punto del using System; antes de eso entonces? Entonces, ¿por qué using System; no importa System.Windows automáticamente, así como System.Windows.Forms : perdón si la palabra import es incorrecta aquí … tal vez moverse al espacio de nombres global es la terminología correcta.

C # no es Java.

Se using directiva using para que no tenga que escribir el nombre completamente calificado de un tipo. También ayuda con la desambiguación de nombres de tipo (utilizando alias, por ejemplo).

En el caso de la Console , por ejemplo, no necesita escribir System.Console .

Es importante comprender la diferencia entre un espacio de nombres y un ensamblaje: un espacio de nombres es una agrupación lógica de tipos. Un ensamblaje es una agrupación física de tipos. Los espacios de nombre pueden abarcar ensamblajes.

Cuando hace referencia a un conjunto (esto es más como importar un paquete en Java), obtiene acceso a todos los tipos públicos en él. Para usar un tipo, necesitas identificarlo de manera única. Esto se hace a través del espacio de nombres: la directiva using simplemente significa que no tiene que escribir el nombre completo del tipo.

La directiva de uso tiene dos usos:

Para permitir el uso de tipos en un espacio de nombres para que no tenga que calificar el uso de un tipo en ese espacio de nombres:

usando System.Text;

Para crear un alias para un espacio de nombres o un tipo. Esto se llama una directiva de uso de alias.

utilizando Project = PC.MyCompany.Project;

http://msdn.microsoft.com/en-us/library/sf0df423.aspx

Sin embargo, debe tener en cuenta que System and System.Windows.Form no están conectados por el nombre en sí de ninguna manera. Si importa (usa) Sistema, significa que usará los tipos de ensamblaje del Sistema en esta clase. Referencia real que especifique en la sección de referencias en el proyecto de Visual Studio que realmente puede usar (incluso sin usar instrucción, ya que es solo un acceso directo para los tipos).

C # no importa espacios de nombres nesteds y esto es por diseño.

El ámbito del espacio de nombres le permite organizar el código y le ofrece una manera de crear tipos únicos a nivel mundial.

Los espacios de nombres nesteds se utilizan para agrupar la funcionalidad relacionada, pero utilizan partes de ella a pedido.

Supongo que no querrás tener todos los tipos de un espacio de nombre tan grande como System si lo único que necesitas es System.Windows .

Entonces, probablemente la pregunta es por qué C # no tiene algo así como using System.*; como java lo hace. No sé la respuesta, pero creo que esto se debe al principio de KISS. Es algo así como usar

select *

nunca sabrá qué tipos agregará y cómo afectarán el código existente.

Incluso en Java tendrías que escribir explícitamente

 import System.*; 

La mayoría de las veces no quiere todos los espacios de nombres nesteds. Estos simplemente desordenarían IntelliSense.

La syntax de “uso” le permite acceso abreviado a los espacios de nombres que ya figuran como referencias en la configuración del proyecto. Si el espacio de nombres aparece como referencia, ya tiene acceso a él por su nombre completo sin la directiva “using”. Simplemente guarda las pulsaciones de teclas.

“Usar” un espacio de nombres dado significa que tendrá acceso a todas las definiciones implementadas directamente en él, no que buscará recursivamente los espacios de nombres incrustados; De lo contrario, se frustraría el propósito de la statement de “Uso”.

Los espacios de nombres existen para evitar la ambigüedad del nombre de clase. La instrucción “Uso” está aquí para evitar el uso de tipos totalmente calificados nesteds en espacios de nombres, cuando usted sabe que no puede haber (o poco) ambigüedad.

No, así no es como funciona.

Y daré un buen argumento en contra de lo que dijiste: intellisnse se volvería loco y encontrar lo que quieres sería un infierno.

Usted tiene acceso a todo en cada espacio de nombres disponible (con puntos), la palabra clave using simplifica esto porque no tiene que especificar desde qué espacio de nombres proviene una clase o estructura (es decir, definida).