Класс C # с нулевым пространством имен - PullRequest
7 голосов
/ 05 января 2011

Проходя некоторый унаследованный код, я обнаружил, что вы можете объявить класс C #, не помещая его в пространство имен (в этом сценарии у меня есть приложение ASP.NET WebForms, а некоторые веб-формы не объявляются ни в одном пространстве имен).

A GetType() для такого класса возвращает тип, в котором для свойства namespace установлено значение null.

Я не знал, что это разрешено - может кто-нибудь подсказать, почему этобыло бы желательно иметь класс, который не объявлен в пространстве имен?

Ответы [ 2 ]

5 голосов
/ 05 января 2011

Конечно, это не очень хорошая практика.Это делает упрощает некоторые примеры, такие как "Привет, мир" - может быть, дизайнеры C # собирались для code-golf; p

Но да, это странность.Я не знаю ни одной веской причины, по которой нам нужно , чтобы иметь возможность напрямую использовать глобальное пространство имен.Даже для методов расширения я бы предпочел добавить директиву using, чтобы привести их в ...

Интересно - кажется, что в mscorlib.dll нечетных 40, а в system.dll* - нечетных 201012 *

var mscorlib = typeof(string).Assembly.GetTypes()
   .Where(t => string.IsNullOrEmpty(t.Namespace)).ToList();
var system = typeof(Uri).Assembly.GetTypes()
   .Where(t => string.IsNullOrEmpty(t.Namespace)).ToList();

(но все частные / сгенерированные компилятором)

3 голосов
/ 05 января 2011

Возможно, для обеспечения возможности взаимодействия с языками, которые не поддерживают пространства имен.

Обновление

После небольшого разбора я вижу случай, когда MS использует.

Все сборки .Net Framework имеют несколько стандартных классов в глобальном пространстве имен, например,

  • FXAssembly: информация о версии.
  • ThisAssembly: информация о сборке.
  • AssemblyRef:информация о зависимой сборке.

Эти классы содержат стандартные метаданные, которые в противном случае было бы труднее \ дороже получить.Я предполагаю, что они решили разместить их в глобальном пространстве имен, чтобы это было стандартное \ обычное расположение, куда инструменты \ утилиты \ и т.д. могли бы добраться до них.Эта информация является начальной загрузкой \ метаинформации, поэтому логически находится над концепцией пространств имен.

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