2010-01-20 24 views
8

¿Hay algún beneficio práctico en el uso de nombres de archivos de unidades largas como MyLib.MyUtils.pas o es solo una especie de prefijo del nombre de la unidad?Espacios de nombres en Delphi

Respuesta

13

espacios de nombres, al igual que todos los identificadores, tienen el propósito de organizar.

Así usarlos, sólo beneficios si su proyecto se organiza de una manera mejor. Este asunto tan subjetivo (¡ha habido 'guerras' incluso en las convenciones de nombres más simples!), Tan imposible de responder realmente.

Here is some documentation sobre cómo funcionan los espacios de nombres en Delphi.

Tenga en cuenta que los espacios de nombres 'verdaderos' (donde más de una DLL genérica puede contribuir al mismo espacio de nombres; así es como funcionan los espacios de nombres en el mundo .NET) no son posibles en Delphi: podría ir por BPL, pero eso no es lo mismo que una 'DLL genérica'. Esto no es una limitación de Delphi en sí, sino de la forma en que los archivos DLL nativos funcionan en Windows.

--jeroen

+0

+1 enlace de interés. Ni siquiera sabía que hay "espacios de nombres oficiales" en Delphi. – jpfollenius

+1

Parece que el artículo del documento se escribió para Delphi.NET (archivo dcuil, etc.). Embarcadero debe editarlo para documentar Delphi para espacios de nombres de Win32. – kludg

+0

+1 gracias por el enlace ... Ahora estoy buscando cualquier referencia de qué versiones admiten estos prefijos de espacio de nombres ... –

0

he editado esta respuesta en respuesta a los comentarios y mi evidente falta de comprensión de la cuestión.

El único beneficio práctico que veo en el uso de nombres de unidades, como usted sugiere es que el IDE va ​​a clasificar las unidades de una manera mejor que sin el prefijo "espacio de nombres". Preferiría usar diferentes carpetas en su lugar.

En algunos casos podría tener sentido - a causa de conflictos de nombres. Por ejemplo, podría tener una unidad MyLib.Utils y una unidad de MyOtherLib.Utils Este hecho puede evitar una cierta confusión (tanto para el IDE y por sí mismo).

También podría simular un espacio de nombres utilizando una clase abstracta con los métodos estáticos de clase:

type 
    Utils = class abstract 
    class procedure Beep; static; 
    end; 
... 
Utils.Beep; 
+1

Si entiendo bien Serg, pregunta por los puntos ** dentro ** (no después) de los nombres de las unidades. –

+0

Puede que tenga razón, ya que la pregunta no es muy detallada. Edité mi respuesta para reflejar esta posibilidad. – jpfollenius

+0

Claro que la pregunta es sobre nombres de unidades "punteadas".Por lo que yo sé, el punto es solo otro símbolo en el prefijo del nombre de la unidad y nada más. Por ejemplo, no puede escribir "usa MyLib" para usar MyLib.MyUtils o usar el identificador "MyLib" de ninguna otra manera. – kludg

2

Ver:

Why does Delphi (dcc32.exe) have an option to set a “Namespace search path”?

espacios de nombres en Delphi están apoyados por el compilador, por lo que el punto en los nombres de las unidades tiene un significado especial. Puede usar el nombre completo calificado del archivo, o puede usar un estilo de 'acceso directo' para el nombre del archivo si la opción dcc32.exe está configurada correctamente.

Por lo que también podría escribir

uses 
    MyBestTools; 

para evitar el nombre calificado completo

uses 
    MyCompany.MyProject.MyLibrary.MyBestTools; 

responsabilidad: Actualmente todo esto es teoría, sino que hará uso de espacios de nombres en algunos proyectos iin un futuro próximo

Para obtener un mejor soporte IDE, siéntase libre de votar en QualityCentral por esta característica de sugerencia:

Visualize the unit namespaces hierarchy in the IDE

+1

He encontrado las mismas opciones en IDE (Delphi 2009): Proyecto/Opciones/Delphi Compiler/Espacio de nombres predeterminado, Prefijo NameSpace – kludg

+0

En Delphi XE7 IDE se llama "Unit scope names" – SoftDeveloper

+0

@SoftDeveloper hace que XE7 todavía tenga '- NS = Parámetro de la ruta de búsqueda del espacio de nombres para dcc32? – mjn