Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Писать using внутри namespace или вне: есть нюансы


Автор: Gunslinger 25.2.2010, 20:07
Будут ли доступны классы пространства имен А, если оно указано вне пространства имен моего кода?
Код

using A; //A_1

namespace В{
  class B_1{ 
  //....  
    void func(){
        A_1 class_a=new A_1();
      //........... 
     }
  }
}

Или писать using A; внутри namespace В? 

Автор: CasperSC 25.2.2010, 23:14
Если написать "А" там где оно у тебя написано в примере, то оно будет доступно в "Б":
То же самое:
Код
using System.Windows.Forms;
using Media;
using System.Threading;

namespace WindowsFormsApplication1
{
    public partial class FormAddNewClock : Form
    {
          MessageBox.Show("Привет!");
...



Так вот MessageBox.Show("Привет!"); доступен в таком виде из-за подключеного выше using System.Windows.Forms;
Если не подключен, то доступ к нему осуществлялся бы так: 
System.Windows.Forms.MessageBox.Show("Привет!");

Автор: Gunslinger 26.2.2010, 19:16
using X; перед namespace -- типа доступ к классам Х всех namespaceов файла, а using X; внутри namespace -- доступ к классам Х только внутри данного неймспейса и его поднеймспейсов?

Автор: mrbrooks 1.3.2010, 09:28
Цитата(Gunslinger @  25.2.2010,  20:07 Найти цитируемый пост)
Или писать using A; внутри namespace В? 

нет. достаточно:
Код

 A.A_1 a1 = new A.A_1();

Автор: Linus 1.3.2010, 16:36
Думаю, правильнее писать юзинги выше нэймспейсов. Классы обычно живут в отдельных файлах. Если я пишу юзинги выше нэймспейса, я подчеркиваю, что он распространяется на текущий файл. Если внутри - я подчеркиваю (ошибочное) то, что юзинги распространяются на текущий нэймспейс (т.е. >= 1 file), так как он их аггрегирует (хоть это и невозможно, но сама вложенность об этом говорит). Плюс, если писать using внутри нэймспэйса, то можно использовать сокращенную форму юзингов (без первой части). Это усложняет чтение и понимание кода. Суммируя всё вышесказанное, я полагаю, что юзинги нужно использовать только выше нэймспейсов.

Автор: Ram1reS 1.3.2010, 17:26
Microsoft Style Cop считает, что using должны быть внутри namespace.

Автор: Linus 4.3.2010, 13:58
К тому же, http://using.castleproject.org/display/CASTLE/Coding+Standards тоже так считают... Только какими ценностями и принципами руководствуются они при этом - не ясно. А пока не ясно, то придерживаться такого стиля, думаю, глупо.

Автор: PashaPash 4.3.2010, 15:20
Linus, неясно - это теперь сокращение для "я не нажимал F1 на строчке с ошибкой"? smile
вот онлайновый вариант хелпа: http://www.thewayithink.co.uk/stylecop/sa1200.htm

Автор: Gunslinger 8.3.2010, 22:22
Цитата(Linus @  1.3.2010,  16:36 Найти цитируемый пост)
Если я пишу юзинги выше нэймспейса, я подчеркиваю, что он распространяется на текущий файл. Если внутри - я подчеркиваю (ошибочное) то, что юзинги распространяются на текущий нэймспейс (т.е. >= 1 file), так как он их аггрегирует (хоть это и невозможно, но сама вложенность об этом говорит).

Об этом моменте не подумал. Вас не понял: если неймспейс состоит из нескольких файлов, то using внутри namespace A в одном файле будет распространяться на тот же namespace A в другом файле?

з.ы. практику разделения один класс=один файл знаю в ActionScript3. В .NET что, так же? 

Автор: KelTron 9.3.2010, 07:36
Цитата(Gunslinger @  8.3.2010,  22:22 Найти цитируемый пост)
если неймспейс состоит из нескольких файлов, то using внутри namespace A в одном файле будет распространяться на тот же namespace A в другом файле?

Нет

Цитата(Gunslinger @  8.3.2010,  22:22 Найти цитируемый пост)
з.ы. практику разделения один класс=один файл знаю в ActionScript3. В .NET что, так же? 

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

Автор: Gunslinger 9.3.2010, 19:52
Ок.

Автор: Linus 13.3.2010, 09:07
PashaPash, это значит, что на данный момент не юзаю StyleCop smile

Из описания стало ясно, какие проблемы решает помещение юзингов вовнутрь нэймспейсов:

Цитата

1. Placing using-alias directives within the namespace eliminates compiler confusion between conflicting types.
2. When multiple namespaces are defined within a single file, placing using directives within the namespace elements scopes references and aliases.


В первом случае, чтобы не напороться на одинаковые имена классов, нам всё равно приходится "предугадывать" такие ситуации и явно прописывать алиасы "using Guid=System.Guid". И, всё же, думаю это классный кейс "за" использование юзингов внутри namespaces.

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

А минусы привел выше. 

Автор: PashaPash 15.3.2010, 00:02
Linus, основной минус - в стандартных студийных шаблонах юзинг написан вне неймспейса smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)