Por lo que entiendo, el calificador global::
le permite acceder a un espacio de nombres que ha sido ocultado por otro con el mismo nombre. El MSDN page usa System
como ejemplo. Si crea su propio espacio de nombre System
, puede alcanzar el original con global::System
. Lo primero que me vino a la mente es, ¿por qué alguien llamaría a su espacio de nombres System
? La página continúa diciendo que esto obviamente no es recomendable, pero la duplicación del espacio de nombres es muy posible en proyectos grandes. Si/cuando esto ocurre, ¿es una señal de que las cosas van en la dirección incorrecta, o hay razones válidas para tener espacios de nombres en conflicto?El uso de global :: para espacios de nombres conflictivos
Respuesta
Una razón legítima para tener espacios de nombres conflictivos podría ser el uso de bibliotecas internas que se escribieron para versiones anteriores de .Net que no contenían la funcionalidad que se agregó en versiones posteriores. En .Net 1.1 días, por ejemplo, escribí una clase de registro que incluía las llamadas de registro API. Por pura casualidad, los nombres de método que elegí eran exactamente los mismos que los de la clase de Registro .Net posterior, e hicieron exactamente las mismas cosas, por lo que fue fácil desenchufar el código de mi propio país. Para cosas más complicadas, podría ser útil poder usar un fragmento de código más antiguo y mal nombrado con el calificador global::
.
Nombrar intencionalmente una nueva pieza de código usando un espacio de nombres .Net existente sin duda sería un olor a código.
En general, global::
se utiliza para indicar "Quiero comenzar en la parte superior de la estructura del espacio de nombres". Si tengo un espacio de nombres llamado MyProduct.System
, todo lo que resida en el espacio de nombres MyProduct
no podrá acceder al espacio de nombres Microsoft System
. ¿Es un olor a código? Quizás a veces, pero no particularmente maloliente.
Cualquier código generado por la máquina debe probar y usar global::
para minimizar el potencial de conflictos de espacio de nombres que puede no tener en cuenta. Además, cualquier código que pueda entrar en conflicto puede usarlo para ser más específico.
Creo que sucede de vez en cuando que uno de tus espacios de nombres tiene el nombre de otro. Por ejemplo, tengo un espacio de nombre .Persistence.NHibernate, donde NHibernate también podría ser el espacio de nombres raíz del ensamblado de NHibernate.
no veo ningún código olor aquí, es sólo nombrar isses;)
Microsoft tiene unas buenas pautas de espacio de nombres en el libro excelente Framework Design Guidelines 2nd Ed.
. En general, recomiendan no introducir conflictos (por ejemplo, al nombrar su tipo Stream).
No creo que haya usado alguna vez el calificador global ::. En general, lo consideraría un olor codificado (aunque hay excepciones, como lo señalan MusiGenesis y las seis variables de la lista).
- 1. Uso de espacios de nombres PHP
- 2. Uso de varios espacios de nombres en el elemento html
- 3. ¿Cómo uso los espacios de nombres en Backbone con RequireJs
- 4. PHP: Los espacios de nombres en un único archivo con un espacio de nombres global
- 5. uso de LINQ to XML con espacios de nombres XML
- 6. Ámbito global vs espacio de nombres global
- 7. Espacios de nombres en Delphi
- 8. herencia y espacios de nombres
- 9. Uso de Devise con varios espacios de nombres para el mismo Modelo
- 10. Espacios de nombres y resolución de operador
- 11. ¿Cómo uso los espacios de nombres con Zend Framework?
- 12. Espacios de nombres, alias y diseñador de Visual Studio Forms
- 13. Predefinir espacios de nombres XML para DataContractSerializer
- 14. ¿Para qué sirve el parámetro de espacios de nombres MapRoute?
- 15. ¿El uso de espacios de nombres afecta el rendimiento o el tiempo de compilación?
- 16. Animaciones de espacios de nombres
- 17. Espacio de nombres Contexto y uso de espacios de nombres con XPath
- 18. ¿Los espacios de nombres son malos para el rendimiento? (PHP)
- 19. Espacio de nombres y espacios de nombres secundarios
- 20. Espacios de nombres en JSON
- 21. StAX y espacios de nombres
- 22. C++: "Espacios de nombres de clase"?
- 23. ¿Squeak admite espacios de nombres?
- 24. ¿Espacios de nombres en Redis?
- 25. espacios de nombres XElement (¿Cómo?)
- 26. Soporte de Ruby para espacios de nombres XML
- 27. estilo y espacios de nombres
- 28. ¿HTML5 admite espacios de nombres?
- 29. ¿Analizar espacios de nombres XML?
- 30. socket.io habitaciones o espacios de nombres?
¿Hay buenos olores de código? : p –
@rpflo: Tal vez quiere decir "¿es este un olor de código severo?" –
En contraste con el buen código, que huele a lilas. :) –