Ссылки на пространство имен в C # против VB.Net - PullRequest
9 голосов
/ 22 августа 2009

В 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

Однако, если вы делаете то же самое в C # ...


using System;

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

Вы получите ошибку в строке с возвратом в "Collections.Generic.List", говорящем: "Не удалось найти тип или имя пространства имен" Коллекции "(отсутствует директива using или ссылка на сборку?)"

Я знаю, что на самом деле вы должны иметь директиву using для System.Collections.Generic для использования List, но я не знаю почему . Я также не понимаю, почему я не получаю ту же ошибку в объявлении функции, а только в операторе возврата.

Я надеялся, что кто-нибудь сможет объяснить это или даже отослать меня на техническую страницу, которая объясняет это. Я искал вокруг, но не могу найти ничего, что объясняет эту концепцию.

Редактировать: Следует отметить, что вопрос действительно в том, чтобы ссылаться на суб-пространство имен, например, в примере с возможностью ссылаться на Коллекции в Системе.

Ответы [ 3 ]

5 голосов
/ 22 августа 2009

using директива на C # не позволяет это:

Создать директиву использования для использования вводит в пространство имен без необходимости указать пространство имен. Использование директива не дает вам доступ к любые пространства имен, вложенные в пространство имен, которое вы указываете.

VB.NET, однако, поддерживает несколько более близкое поведение с оператором Imports:

Объем выполненных элементов доступно в отчете об импорте зависит от того, насколько конкретно вы используя утверждение импорта. За Например, если только пространство имен указано, все члены с уникальными именами этого пространства имен, и члены модули в этом пространстве имен, являются доступны без квалификации. Если как пространство имен, так и имя Элемент этого пространства имен указано, только члены этого элемент доступен без квалификация.

Справочный вопрос SO

5 голосов
/ 22 августа 2009

Это потому, что VB.Net поддерживает частичные пространства имен ; C # нет.

В Visual Basic система импортируется по умолчанию и дочерние пространства имен автоматически разрешается.

Подробнее в этой статье.

VB.Net против C #, Раунд 2: Частичные пространства имен

0 голосов
/ 22 августа 2009

Вы можете сказать System.Collections.Generic.List. это будет работать.

Я думаю, вам нужно дать весь список, а не пропускать системную часть.

ТАКЖЕ вам нужно будет создать шаблон со строкой, как в List, аналогично List (Of string)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...