2009-08-21 26 views
13
namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      System.Text.MyCustom mc = new System.Text.MyCustom(); 
     } 
    } 
} 

namespace System.Text 
{ 
    public class MyCustom { } 
} 

¿Cómo puedo hacer esto en VB, aunque tenga un espacio de nombres raíz en la aplicación, esto es posible?¿Hay alguna manera de escapar del espacio de nombres raíz en VB?

Actualización: De acuerdo con las respuestas, supongo que no hay forma de hacerlo. Publiqué una sugerencia de función para Microsoft Connect: Please vote.

+1

No puede hacer esto sin eliminar el espacio de nombres raíz para la aplicación. La única forma de lograr lo que desea es eliminar el espacio de nombres raíz y establecer explícitamente el espacio de nombres en todas partes del código. En el proyecto C# no tiene espacio de nombres raíz, solo espacio de nombres predeterminado, que es realmente lo que está pidiendo aquí. Lo siento, esta es una de las diferencias entre VB.NET y C#. – awe

+2

para admirar: esta debería ser una respuesta a continuación ... – Colin

Respuesta

13

En VB.NET de VS 2012, este problema anterior está solucionado. A partir de esta versión, puede escapar del espacio de nombres raíz con un global líder. El siguiente código es defectuoso en VS 2010 y correcto en VS 2012:

Imports Tools 

Module Module1 
    Sub Main() 
     SayHello() 
    End Sub 
End Module 

Namespace Global.Tools 
    Module TestModule 
     Sub SayHello() 
      Console.Out.WriteLine("Hello") 
     End Sub 
    End Module 
End Namespace 
+1

Fue [mi sugerencia al conectar] (https://connect.microsoft.com/VisualStudio/feedback/details/484455/allow-escaping-root-namespaces-in-vb), ¡estoy tan orgulloso de que se haya graduado! – Shimmy

0

Configurar un espacio de nombre en VB.NET es más o menos lo mismo que declarar un espacio de nombres en C#, ¡solo con la sintaxis de VB.NET! Desafortunadamente, el espacio de nombres raíz siempre está presente, por lo que cualquier espacio de nombres nuevo declarado estará dentro del espacio de nombres raíz.

Namespace ConsoleApplication1 
    Class Program 
    Private Shared Sub Main(ByVal args As String()) 
     Dim mc As New System.Text.MyCustom() 
    End Sub 
    End Class 
End Namespace 

Namespace System.Text 
    Public Class MyCustom 
    End Class 
End Namespace 

El código anterior se dará la siguiente si el espacio de nombres raíz es Test.

Test.ConsoleApplication1
Test.System.Text


Los aplausos por los comentarios chicos, fue la publicación en la memoria!

+1

Pruebe lo que escribió y luego acceda al buscador de objetos y búsquelo. – Shimmy

+1

Se está agregando a ConsoleApllication1.System.Text, a diferencia de C#. Por supuesto, puedo establecer el espacio de nombres raíz como nulo, pero esto no es lo que quiero. – Shimmy

+1

Además, supongo que la clase 'Program' vive en el espacio de nombres' ConsoleApplication1.ConsoleApplication1' en el ejemplo anterior (aunque no tengo un entorno vb.net para verificarlo). –

5

Creo que la triste verdad es que no se puede. Los espacios de nombres se anexan al espacio de nombres raíz. The documentation no da ninguna pista de ningún mecanismo de escape. Hay una nota sobre el uso de la palabra clave Global en relación con los espacios de nombres, pero interpreto esa parte del texto como la forma de referirme a los espacios de nombres en lugar de cómo declararlos.

1

Echa un vistazo a esta pregunta: Possible to override VB.NET root namespace?.

La conclusión es que su única opción es dejar el espacio de nombres predeterminado vacío en las propiedades del proyecto y luego ajustar todas las definiciones de clase/módulo en las declaraciones de Namespace.

0

I las propiedades del proyecto de un proyecto de VB puede cambiar el espacio de nombres raíz. Esto es por defecto igual que el nombre del proyecto, pero puede eliminarlo, y luego tiene el poder completo de la estructura del espacio de nombres en el código. El inconveniente es que debe especificar el nombre del proyecto como espacio de nombres en cualquier lugar del código donde lo necesite ...

Para proyectos C#, la configuración similar en Propiedades del proyecto es solo el Espacio de nombres predeterminado, que se reemplaza si especifica el espacio de nombres en el código. Para proyectos de VB, especifica el espacio de nombres de nivel superior, no el predeterminado ....

Cuestiones relacionadas