2009-08-22 31 views
8

en VB.Net que pueden hacer algo como lo siguiente sin ningún problema ... simplemente ignorar el hecho de que esta es una clase bastante inútil :-)referencias de espacio de nombres en C# vs. VB.Net


Imports System 

Public Class Class1 
    Public Shared Function ArrayToList(ByVal _array() As String) As Collections.Generic.List(Of String) 
     Return New Collections.Generic.List(Of String)(_array) 
    End Function 
End Class 

sin embargo si lo hace lo mismo en C# ...


using System; 

public class Class1 
{ 
    public static Collections.Generic.List ArrayToList(string[] _array) 
    { 
     return new Collections.Generic.List(_array); 
    } 
} 

usted recibirá un error en la línea con el retorno de la "Collections.Generic.List" diciendo "el tipo o espacio de nombres 'Colecciones' no se pudo encontrar (¿falta una directiva de uso o una referencia de ensamblado?) "

Sé que tiene que tener realmente una directiva de uso de System.Collections.Generic para usar List pero no sé por qué. Tampoco entiendo por qué no obtengo el mismo error en la declaración de función, sino solo en la declaración de devolución.

Esperaba que alguien pudiera explicar esto o incluso referirme a una página de tecnología que lo explique. He buscado, pero no encuentro nada que explique este concepto.

Editar: Solo para tener en cuenta, la pregunta es realmente sobre la referencia de un espacio de nombres secundario, como en el ejemplo que puede hacer referencia a Colecciones dentro del sistema.

+1

Referencia: http://stackoverflow.com/questions/768905/namespace-and-sub-namespaces – Kirtan

Respuesta

4

using Directiva en C# does not allow esto:

Crear una directiva using a utilizar los tipos en un espacio de nombres sin tener que especifique el espacio de nombres. Una directiva de uso no le da acceso a espacios de nombres que están anidados en el espacio de nombre que especifique.

VB.NET, sin embargo, el comportamiento supports somewhat closer con Imports declaración:

El alcance de los elementos de hecho a disposición por una instrucción Imports depende de lo específico sea cuando usando la instrucción Imports.Para el ejemplo , si solo se especifica un espacio de nombres , todos los miembros con nombre único de ese espacio de nombres, y los miembros de los módulos dentro de ese espacio de nombres, son disponibles sin calificación. Si se especifica un espacio de nombre y el nombre de un elemento de ese espacio de nombre, , solo los miembros de ese elemento están disponibles sin la calificación .

Reference SO Question

+0

Esto es increíble, no estoy seguro de cómo me perdí esta publicación, creo que la cadena de búsqueda no fue lo suficientemente cerca. ¡Gracias! – tcnolan

4

Esto se debe a que VB.Net admite parciales espacios de nombres; C# no.

Con Visual Basic, Sistema ha sido importada por espacios de nombres por defecto y el niño están resuelve automáticamente.

Lea más en este artículo.

VB.Net vs C#, Round 2: Partial Namespaces

+1

Eso es un artículo impresionante. La tercera publicación creo que responde la pregunta más directamente aquí, pero fue muy útil, así que di los puntos. ¡Gracias! – tcnolan

+0

@rahul, el enlace al artículo de espacios de nombres parciales ahora está roto. – CokoBWare

0

se puede decir System.Collections.Generic.List. eso funcionaria.

Creo que debe proporcionar toda la lista y no omitir la parte del sistema.

También tendrá a la plantilla con una cuerda como en la Lista similar a la lista (de cuerda)

Cuestiones relacionadas