usa una tipo sirve que puede publica pero para nombres nombre métodos miembros existe espacio ejemplos directamente contener como clases clase campos biblioteca c# .net vb.net namespaces

c# - una - un espacio de nombres no puede contener directamente miembros como campos o métodos



.NET espacios de nombres múltiples para una sola clase (3)

Como solución, puede "usar" la clase en el segundo espacio de nombres cuando lo necesite:

namespace classLib1.section2 { public myBigClass {

y en cada archivo que lo use en el espacio de nombres anterior puede agregar una línea

namespace classLib1.section1 { using myBigClass = classLib1.section2.myBigClass;

como un parche temporal hasta que haya solucionado esto correctamente.

¿Es posible que una sola clase resida dentro de dos espacios de nombres y cómo puedo hacer esto?

Para aclarar: tenemos una biblioteca de clases (digamos que el espacio de nombres raíz es classLib1), que ha crecido con el tiempo (más clases) y quiero agrupar lógicamente las clases en diferentes espacios de nombres. Sin embargo, algunas de las clases anteriores deben agruparse en estos nuevos espacios de nombres (por ejemplo, classLib1.section1) y al hacerlo se romperá el código heredado en otros conjuntos que usan esta biblioteca de clases. Así que quiero poder referirme a una clase usando ambos espacios de nombres hasta que podamos eliminar los antiguos.

¡No puedo encontrar ninguna información sobre esto, lo que sugiere que hay una razón por la que la gente no querría hacer esto!


No, no hay manera de dar dos nombres a una sola clase (el espacio de nombres es en realidad solo una parte del nombre de la clase).

Como solución alternativa, puede mover las clases a su nueva ubicación y crear envolturas delgadas alrededor de ellas en la ubicación anterior (Patrón de fachada). Una mejor solución, por supuesto, sería mover las clases y corregir el código heredado en consecuencia.


El reenvío de tipos se introdujo en .net 2.0, lo que significa que puede usar el atributo TypeForwardedToAttribute para indicar que un tipo que originalmente estaba presente en AssemblyX ahora se encuentra en AssemblyY.

Estoy bastante seguro de que esto solo es apropiado / aplicable si se está separando en varios ensamblajes, pero vale la pena saberlo incluso si no lo está.