¿Puedo exponer una clase de otro espacio de nombres .net como una clase en mi espacio de nombres?

StackOverflow https://stackoverflow.com/questions/138638

  •  02-07-2019
  •  | 
  •  

Pregunta

¿Puedo exponer una clase de otro espacio de nombres .net como una clase en mi espacio de nombres? Utilizo una clase - antlr.collections.AST - como el tipo de retorno para una función que pertenece a una clase en mi espacio de nombres; como resultado, el usuario debe tener

using antlr.collections;
using myNamespace;

en la parte superior de sus archivos para usar mi función. ¿Puedo hacer que myNamespace.AST sea un alias para antlr.collections.AST, de modo que el usuario solo tenga que tener

using myNamespace;

en la parte superior de sus archivos?

¿Fue útil?

Solución

Tenga en cuenta que los consumidores de su código en realidad no necesitarán tener declaraciones de uso. Esos están ahí para hacerles la vida más fácil, por lo que no tienen que escribir antlr.collections.Foo y antlr.collections.Bar en su fuente.

El mayor " impacto " (Si realmente existe uno grave) es que el consumidor de su código necesitará una referencia firme al ensamblaje donde se definen las colecciones antlr.

Sin embargo, si eso está documentado por adelantado, honestamente no veo que sea un problema tan grande. No es diferente al consumidor de un DAL generado por SubSonic que necesita referencias tanto al ensamblaje de DAL generado como al ensamblaje original de SubSonic. (Y, posiblemente, también usando declaraciones).

Las dependencias son lo que son. Hay una razón por la cual las clases se dividen en espacios de nombres, principalmente para la organización y para reducir los conflictos de nombres. Al no saber qué clases hay en el espacio de nombres que menciona, no sé qué tan probable es ese conflicto en su escenario ... Pero intentar mover la clase de un espacio de nombres a otro, u ocultar el hecho de que es necesario Al derivar una clase en blanco de ella, probablemente no sea la mejor idea. No matará a los consumidores de su clase por tener otra referencia y declaración de uso.

Otros consejos

¿Qué hay de derivar una clase usando el mismo nombre en el nuevo espacio de nombres? Quise decir:

namespace MyForms {
    class Class1 : Some.Other.Namespace.Class1 {
        // ...
    }
}

crea una nueva clase que hereda la clase en tu nuevo espacio de nombres. No es ideal, pero es útil para pruebas de unidad y similares.

Sin embargo, debes pensar por qué estás haciendo esto, las clases se dividen en espacios de nombres por una razón.

No, no puedes.

La ruta completa y el nombre de una clase es parte de su identidad.

Si deriva de la clase y devuelve su clase derivada, se hará responsable de proporcionar toda la documentación para el tipo de devolución.

Creo que harás un daño a los desarrolladores que usan tu biblioteca porque no necesariamente sabrán que con lo que realmente están trabajando es un tipo de antir.collections (no es que yo sepa lo que es eso, pero ese no es el punto). Si el desarrollador acude a StackOverflow.com para buscar información sobre ese tipo de devolución, es más probable que encuentre información si el tipo es de " common " biblioteca, o de la suya?

La única solución es ocultar la dependencia completa al tipo antlr.collections.AST.

Puede usar un Adaptador para ese propósito.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top