2010-06-05 3 views
3

Можно создать дубликат:
Should Usings be inside or outside the namespaceC# с использованием заявления размещения

Я смотрю на базе кода, где автор (один я уважаю) последовательно размещает используя операторы внутри пространства имен, так как против него. Есть ли преимущество (более эффективный GC?) Для этого или это просто предпочтение в стиле кода?

Приветствия,
Berryl

+0

см. Http://stackoverflow.com/questions/1342830/c-location-of-using-statements – wsanville

+0

выглядит как обман http://stackoverflow.com/questions/125319/should-usings-be-inside -or-out-the-namespace – allonym

ответ

1

Если у вас есть несколько пространств имен в одном файле, то вы будете предметного охвата usings только вмещающего пространства имен, а не для всех имен во всем файле.

Также см (только что нашел это хорошее объяснение) Should 'using' statements be inside or outside the namespace?

+2

Но если вы придерживаетесь 1-го класса для каждого файла, это не проблема. –

+0

@ Энтони: Именно. –

2

Никогда не кладите их внутрь без использования «глобального ::» или ваш код станет хрупким.

namspace bar { 
    using foo //this may mean "using global::bar.foo OR using global::foo" 

} 

Ссылка

http://blogs.msdn.com/b/ericlippert/archive/2007/06/25/inside-or-outside.aspx?wa=wsignin1.0

+0

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

+2

Я подозреваю, что разработчики, с которыми вы работаете, являются более сложными, чем те, с которыми мы все общаемся. И даже тогда мы закончили с System.Data и System.Windows.Data, что действительно противоречит правилам импорта VB. –

0

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

using Bar; 

namespace Foo 
{ 
    using Bar; 

    namespace Bar 
    { 
     class C 
     { 
     } 

    } 

    namespace Baz 
    { 
     class D 
     { 
      C c = new C(); 
     } 
    } 
} 

namespace Bar 
{ 
    class E 
    { 
    } 
} 

В этом случае внешний оператор использования ссылается на панель пространства имен, которая находится после пространства имен Foo. Внутренний оператор использования относится к бару, который находится внутри Foo. Если бы внутри Foo не было бара, тогда внутреннее также относилось бы к внешней панели.

Редактировать И как указывает Джонатан, внутреннее использование может быть изменено на `using global :: Bar; ', чтобы ссылаться на пространство имен Out Bar, которое могло бы сломать этот конкретный код из-за попытки D использовать C.

1

Скотт Hanselman сделал post about this еще в июле 2008 года я не узнайте, изменилось ли это с помощью платформы .NET 4 но в основном это стало проблемой, если вы не назовете свои классы такими же, как существующие классы, а также несколько пространств имен в одном файле.

Смежные вопросы