Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Писать using внутри namespace или вне: есть нюансы 
V
    Опции темы
Gunslinger
Дата 25.2.2010, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: нет
Всего: 3



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

using A; //A_1

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

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

Это сообщение отредактировал(а) Gunslinger - 25.2.2010, 20:09
PM MAIL   Вверх
CasperSC
Дата 25.2.2010, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 27.11.2009

Репутация: нет
Всего: 1



Если написать "А" там где оно у тебя написано в примере, то оно будет доступно в "Б":
То же самое:
Код
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("Привет!");
PM MAIL   Вверх
Gunslinger
Дата 26.2.2010, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: нет
Всего: 3



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

PM MAIL   Вверх
mrbrooks
Дата 1.3.2010, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 17
Всего: 306



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

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

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

PM MAIL   Вверх
Linus
Дата 1.3.2010, 16:36 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 13.8.2006
Где: Украина

Репутация: нет
Всего: 4



Думаю, правильнее писать юзинги выше нэймспейсов. Классы обычно живут в отдельных файлах. Если я пишу юзинги выше нэймспейса, я подчеркиваю, что он распространяется на текущий файл. Если внутри - я подчеркиваю (ошибочное) то, что юзинги распространяются на текущий нэймспейс (т.е. >= 1 file), так как он их аггрегирует (хоть это и невозможно, но сама вложенность об этом говорит). Плюс, если писать using внутри нэймспэйса, то можно использовать сокращенную форму юзингов (без первой части). Это усложняет чтение и понимание кода. Суммируя всё вышесказанное, я полагаю, что юзинги нужно использовать только выше нэймспейсов.
PM MAIL ICQ   Вверх
Ram1reS
Дата 1.3.2010, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 25.4.2008
Где: Москва

Репутация: 2
Всего: 5



Microsoft Style Cop считает, что using должны быть внутри namespace.
--------------------
 
PM MAIL ICQ   Вверх
Linus
Дата 4.3.2010, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 13.8.2006
Где: Украина

Репутация: нет
Всего: 4



К тому же, Castle тоже так считают... Только какими ценностями и принципами руководствуются они при этом - не ясно. А пока не ясно, то придерживаться такого стиля, думаю, глупо.
PM MAIL ICQ   Вверх
PashaPash
Дата 4.3.2010, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 9
Всего: 49



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



--------------------
PM MAIL WWW   Вверх
Gunslinger
Дата 8.3.2010, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: нет
Всего: 3



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

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

з.ы. практику разделения один класс=один файл знаю в ActionScript3. В .NET что, так же? 
PM MAIL   Вверх
KelTron
Дата 9.3.2010, 07:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 11
Всего: 38



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

Нет

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

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


Это сообщение отредактировал(а) KelTron - 9.3.2010, 07:37


--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
Gunslinger
Дата 9.3.2010, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: нет
Всего: 3



Ок.
PM MAIL   Вверх
Linus
Дата 13.3.2010, 09:07 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 13.8.2006
Где: Украина

Репутация: нет
Всего: 4



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.

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

А минусы привел выше. 
PM MAIL ICQ   Вверх
PashaPash
Дата 15.3.2010, 00:02 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 9
Всего: 49



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


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1058 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.