Пространства имен и использование директив - PullRequest
6 голосов
/ 21 июля 2009

Если у меня есть пространство имен вроде:

namespace MyApp.Providers
 {
    using System;
    using System.Collections.Generic;
    using System.Configuration;
    using System.Globalization;
  }

Означает ли это, что если я создаю другие файлы и классы с тем же пространством имен, операторы using разделяются, и мне не нужно их снова включать?

Если да, разве это не головная боль управления?

Ответы [ 6 ]

11 голосов
/ 21 июля 2009

Нет, это хорошо только для раздела пространства имен внутри файла. Не для всех файлов в пространстве имен.

Если вы поместите оператор using вне пространства имен, он будет применяться ко всему файлу независимо от пространства имен.

Он также будет сначала искать Usings внутри пространства имен, прежде чем перейти к внешней области.

2 голосов
/ 21 июля 2009

Вам необходимо указать директиву using для любых классов, на которые вы хотите ссылаться без квалификации, в каждом файле, где вы хотите их использовать.

Ссылка

Область применения директивы ограничивается файлом, в котором он появляется.

0 голосов
/ 21 июля 2009

Используются только для текущего файла. Независимо от того, находятся они внутри или вне объявления пространства имен, разница будет незначительной:

Порядок поиска типов следующий:

  1. начало в самой внутренней декларации пространства имен
  2. посмотрите в текущем пространстве имен
  3. посмотрите на использование текущего пространства имен
  4. перейти к объявлению родительского пространства имен и повторить с шага 2

В результате эта программа прекрасно скомпилируется:

namespace MyProject.Main {
    using System;

    class Program {
        public static void Main(string[] args) {
            Console.WriteLine("Hello, World!");
        }
    }
}

// in another file:
namespace MyProject.Console {
    class Test {}
}

Но если переместить using System; наверх, компиляция завершится неудачей (MyProject.Console.WriteLine не существует).

0 голосов
/ 21 июля 2009

Операторы использования действительны для файла кода, в котором они появляются, с незначительным изменением; если вы поместите операторы использования в пространство имен, они будут ограничены областью действия этого пространства имен, но все еще только в пределах того же файла кода.

0 голосов
/ 21 июля 2009

Нет.Вам нужно будет включить пространства имен в каждый класс, кроме частичных классов.

Примечание с одной стороны: вы делаете очень хорошую практику размещения операторов using внутри пространства имен.Это очень хороший синтаксис.

Продолжайте в том же духе.

0 голосов
/ 21 июля 2009

Нет, это не так, и поэтому нет, это не так.

Учтите, что за пределами объявления namespace вы находитесь в глобальном пространстве имен. Влияют ли операторы using в этой области исходного файла на глобальное пространство имен в других исходных файлах?

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