2010-06-22 30 views
10

Bueno, no hemos encontrado ninguna publicación anterior para responder a mi pregunta de manera ....C#: ¿Puedes dividir un espacio de nombres en varios archivos?

Soy nuevo en C# y la creación de algunas formas de Windows y notamos que creó un tanto Program.csForm1.cs y archivos.

En tanto, se inicia con el espacio de nombres de mi programa "Contactos"

namespace Contacts 
{ 
    //code here 

Son estos compilados juntos, o están siendo vistos por separado por el compilador?

Respuesta

11

Sí, puedes. El espacio de nombres de Contactos contendrá todas las clases definidas en los archivos que definen ese espacio de nombres.

También puede definir tipos que pertenecen a diferentes espacios de nombres en el mismo archivo. Los archivos y espacios de nombres son conceptos completamente ortogonales.

También puede dividir una definición de clase en varios archivos, ya que C# 2.0. Ver here.

+0

WTF!Me han dicho 'C#' no tiene herencia múltiple porque es "fuente de problemas", y puedes declarar el mismo espacio de nombres en muchos archivos, C# "mezclarlos" en el mismo ... ** y ** también puede dividir una definición de clase en múltiples archivos? ¿Seriamente? –

+0

Los espacios de nombres están destinados a contener tipos, y dado que los tipos a menudo se definen en diferentes archivos, la división de espacios de nombres en archivos es bastante obvia. Muchos lenguajes principales hacen lo mismo. En cuanto a las clases, el argumento es más sutil. Dividirlos puede ayudar a organizar el código en los casos en que se ve obligado a poner una gran cantidad de miembros en la misma clase, p. para acceso a datos o integraciones. También puede ayudar con el control de la fuente. En última instancia, depende de usted controlar que la situación no se complique. En el caso de la herencia múltiple, las cosas se complican en términos de cómo construyes tu tiempo de ejecución, que es – Mau

+0

"En última instancia, depende de ti controlar que la situación no se complique". Esta es la oración que muestra que eres un inteligente y buen desarrollador. Y esa oración muestra que no importa cuál sea el idioma, siempre termina "arriba el desarrollador para controlar la situación". Lo que quiero decir es que decir C# no tiene herencia múltiple porque es una "fuente de problemas" es un sinsentido. C# es un lenguaje muy bueno y ** debe ** tener capacidades de herencia. La "fuente del problema" nunca es sobre el lenguaje, se trata de los desarrolladores en mi humilde opinión (es por eso que utilizamos la interfaz como una solución alternativa). –

6

espacio de nombre es solo un prefijo para el nombre de la clase, la forma de separar las clases. se compilan por separado.

1

No hay problema con la división de un espacio de nombres en varios archivos, y en la mayoría de los programas hará exactamente eso.

Normalmente, todos los archivos .cs se compilarán junto con C# compiler (csc).

Se puede ver cómo se compila el código cambiando este ajuste:

Herramientas | Opciones | Proyectos y soluciones | Compilar y ejecutar

Cambie el menú desplegable: "Nivel de detalle de la salida de compilación del proyecto MSBuild" a una de las configuraciones más altas. Se establece al mínimo por defecto.

0

La respuesta corta es sí, puede dividirlos en archivos separados.

5

Desde el MSDN Documentation:

La palabra clave namespace se utiliza para declarar una alcance. Este ámbito de espacio de nombre le permite organizar el código y le ofrece una forma para crear tipos únicos a nivel mundial.

Sí, los espacios de nombres pueden (y suelen ser) divididos en varios archivos de código. Las clases en esos espacios de nombres se compilan por separado, pero (en general, omitiendo los recursos externos por ahora) en un solo archivo de salida (es decir, un exe o un dll).

En un sentido amplio muy, piénsalo como ordenar la ropa. Cada "pila" (la pila de colores, la pila de blancos, etc.) sería un espacio de nombres. Cada pieza de ropa en una pila sería una clase o una interfaz.

Espero que ayude un poco ...

+2

Mejor versión de la analogía: los propios montones son los archivos, pero puede tener múltiples montones de blancos, montones de colores múltiples, etc., y están agrupados con tipos de montones similares. ... Aunque me olvido si C# requiere una clase por archivo como lo hace Java. – JAB

+0

Puede colocar varias clases en un archivo (aunque dificulta el mantenimiento si está buscando una clase en un archivo que no recibe su nombre después de esa clase). También puede dividir la misma clase en varios archivos utilizando clases parciales (esto es lo que se hace de forma predeterminada para, por ejemplo, las clases de ventana de WPF, ocultando el código de pegamento de inicialización de GUI). –

2

Sí, se puede utilizar el mismo espacio de nombres en varios archivos.

El ejemplo más accesible: en Visual Studio, después de crear su proyecto, puede crear más archivos en ese proyecto. Hay una configuración para el proyecto de qué espacio de nombres predeterminado asignar a los archivos nuevos. Su proyecto se compilará como un solo dll/exe.

También puede usar espacios de nombres existentes como System. Su clase de sistema estará en su conjunto. Los ensamblados principales de .NET que contienen material del sistema no se volverán a compilar para incluir su adición. Sin embargo, solo necesitará la declaración 1 using System en la parte superior de las clases para usar su nueva clase System.x.

Nota: NO estoy abogando por poner todo su código en el sistema para que pueda evitar el uso de las declaraciones más adelante. Hay razones muy fuertes para no hacer esto, pero es excesivo a los efectos de responder la pregunta original.

0

Ambos se compilan en 1 espacio de nombre, Contacts. Es bastante normal que tenga varios archivos y un solo espacio de nombres.

Un espacio de nombre es solo una especie de envoltorio alrededor de sus clases. Por ejemplo, ahora puede tener múltiples clases con el nombre Sentence. Puede crear una oración en el espacio de nombres Jail y una en el espacio de nombres Linguistics.

De esta manera tendrá 2 representaciones de 1 nombre de clase, Jail.Sentence y Linguistics.Sentence. Ambos también tienen un cuerpo diferente.

Uso mis espacios de nombres para 'organizar' un poco el código. Todos mis existen en las interfaces Projectname.Contracts y mi código normal en Projectname

Esta página de Wikipedia es útil también: Wiki

0

Sí, puede abarcar archivos e incluso ensamblados con un espacio de nombres. Aquí hay otro truco:

En Visual Studio, si va al Explorador de soluciones y crea una carpeta debajo de su proyecto csharp, ese nombre de carpeta se agregará de manera predeterminada al espacio de nombres para cualquier archivo que cree en la carpeta.

Ejemplo:

  1. Crear un nuevo proyecto csharep.
  2. haga clic derecho en el proyecto y seleccione Propiedades
  3. Ajuste el espacio de nombres por defecto (en el diálogo de propiedades) para "MiProyecto"
  4. Ok
  5. Ahora crea una nueva clase en su proyecto.
  6. Aviso ese espacio de nombres de la clase es "MiProyecto"
  7. Ahora, haga clic derecho en su proyecto y crear una carpeta llamada "ASubNamespace"
  8. Ahora haga clic derecho en la carpeta y seleccione Añadir | clase
  9. ¡Observe que su nueva clase está en el espacio de nombres MyProject.ASubNamespace!
0

Si no está dividiéndolo en diferentes archivos, probablemente esté siendo demasiado fino en el diseño del espacio de nombres.

Cuestiones relacionadas