Pregunta

Por ejemplo, hacer referencia a algo como System.Data.Datagrid en lugar de solo Datagrid.Proporcione ejemplos y explicaciones.Gracias.

¿Fue útil?

Solución

El beneficio es que no necesita agregar una importación para todo lo que usa, especialmente si es lo único que usa de un espacio de nombres en particular, también evita colisiones.

La desventaja, por supuesto, es que el código aumenta de tamaño y se vuelve más difícil de leer cuanto más se utilizan calificadores específicos.

Personalmente, tiendo a usar importaciones para la mayoría de las cosas, a menos que esté seguro de que solo usaré algo de un espacio de nombres en particular una o dos veces, por lo que no afectará la legibilidad de mi código.

Otros consejos

Estás siendo muy explícito sobre el tipo al que haces referencia, y eso es un beneficio.Aunque, en el mismo proceso estás renunciando a la claridad del código, lo que claramente es una desventaja en mi caso, ya que quiero que el código sea legible y comprensible.Opto por la versión corta a menos que tenga un conflicto en diferentes espacios de nombres que solo pueda resolverse con una referencia explícita a las clases.A menos que le cree un alias con la palabra clave usando:

using Datagrid = System.Data.Datagrid;

En realidad el camino completo es global::System.Data.DataGrid.El objetivo de utilizar una ruta más calificada es evitar tener que utilizar declaraciones de uso adicionales, especialmente si la introducción de otro uso causará problemas con la resolución de tipos.Existen identificadores más completos para que pueda ser explícito cuando necesite ser explícito, pero si el espacio de nombres de la clase es claro, entonces el DataGrid La versión es más clara para muchos.

Generalmente uso el formato más corto disponible para mantener el código lo más limpio y legible posible.Después de todo, para eso están las directivas de uso, y la información sobre herramientas en el editor VS le brinda detalles instantáneos sobre la procedencia de un tipo.

También tiendo a usar una etiqueta de espacio de nombres para RCW en una capa de interoperabilidad COM, para llamar esas variables explícitamente en el código (pueden necesitar atención especial en el ciclo de vida y la recopilación), por ejemplo

using _Interop = Some.Interop.Namespace;

En términos de rendimiento, no hay ventajas ni desventajas.Todo se resuelve en tiempo de compilación y el MSIL generado es idéntico ya sea que use nombres completos o no.

La razón por la que su uso prevalece en el mundo .NET es por el código generado automáticamente, como el marcado del diseñador.En ese caso, sería mejor calificar completamente nombres como nombres de clases debido a posibles conflictos con otras clases que pueda tener en su código.

Si tiene una herramienta como ReSharper, en realidad le dirá qué referencias totalmente calificadas tiene que son innecesarias (p. ej.atenuándolos en gris) para que puedas cortarlos.Si con frecuencia corta y pega código en sus diversas bases de código, sería imprescindible calificarlas por completo.(Por otra parte, ¿por qué querrías cortar y pegar todo el tiempo?¡Es una mala forma de reutilización de código!)

No creo que haya realmente ningún inconveniente, solo la legibilidad versus el tiempo real dedicado a la codificación.En general, si no tienes espacios de nombres con objetos ambiguos, no creo que sea realmente necesario.Otra cosa a considerar es el nivel de uso.Si tiene un método que usa reflexión y está de acuerdo con escribir System.Reflection 10 veces, entonces no es gran cosa, pero si planea usar mucho espacio de nombres, le recomendaría incluirlo.

Dependiendo de su situación, los calificadores adicionales generarán una advertencia (si esto es lo que quiere decir con redundante).Si luego trata las advertencias como errores, es una desventaja bastante grave.

Me encontré con esto con GCC, por ejemplo.

struct A {
    int A::b; // warning!
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top