Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
86 / 13 / 1
Регистрация: 24.05.2010
Сообщений: 590
.NET 4.x

В чем разница между подключением пространства имен в начале файла и внутри другого пространства имен?

09.01.2018, 15:39. Показов 2402. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет!

Есть свой класс:

C# Скопировано
1
2
3
4
5
6
7
namespace MyNamespace
{
    public class MyClass
    {
 
    }
}
Нужно в нем кое что поделать, например, с использованием регулярных выражений. Для этого нужно подключить соответствующее пространство имен. Сделать это можно вот так:

C# Скопировано
1
2
3
4
5
6
7
8
9
using System.Text.RegularExpressions;
 
namespace MyNamespace
{
    public class MyClass
    {
 
    }
}
или же вот так:

C# Скопировано
1
2
3
4
5
6
7
8
9
namespace MyNamespace
{
    using System.Text.RegularExpressions;
 
    public class MyClass
    {
 
    }
}
В чем разница?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.01.2018, 15:39
Ответы с готовыми решениями:

Псевдонимы пространства имён из другого файла
Здравствуйте, помогите разрешить синтаксическую несправедливость. Есть два файла: Файл 1: <?php ... use...

Как получить доступ к именам пространства имен из другого файла
Помогите мне разобраться: Если определено пространство имен в одном cpp файле, как использовать одно из имен в другом cpp. Пробую что-то...

Получить список имен внутри пространства по уровням
Приветствую. Подскажите, пожалуйста, как получить список имен внутри пространства по уровням. Пример. Есть 2 пространства...

16
Эксперт .NET
6520 / 4096 / 1606
Регистрация: 09.05.2015
Сообщений: 9,560
09.01.2018, 15:43
Разница в области видимости... Сравните 2 варианта ниже, один компилится, другой нет...
C# Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    using System.Text.RegularExpressions;
 
    namespace MyNamespace1
    {
        public class MyClass
        {
            Regex regex;
        }
    }
 
    namespace MyNamespace1
    {
        public class MyClass
        {
            Regex regex;
        }
    }
C# Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    namespace MyNamespace1
    {
        using System.Text.RegularExpressions;
 
        public class MyClass
        {
            Regex regex;
        }
    }
 
    namespace MyNamespace1
    {
        public class MyClass
        {
            Regex regex; // ошибка...
        }
    }
1
 Аватар для ViterAlex
8947 / 4859 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
09.01.2018, 15:49
Если вдруг у тебя в файле несколько пространств имён, то юзинги из одного не будут видны в другом.
0
Wanna be serious
 Аватар для Bespridelschic
587 / 474 / 186
Регистрация: 31.07.2013
Сообщений: 1,693
09.01.2018, 16:26
Как сказали выше - разница в области видимости. Но при этом, при компиляции, компилятор подставит полные пути до класса:
C# Скопировано
1
2
3
4
5
6
7
namespace MyNamespace1
{
    public class MyClass
    {
        System.Text.RegularExpressions.Regex regex;
    }
}
1
Эксперт .NET
 Аватар для kolorotur
17810 / 12961 / 3381
Регистрация: 17.09.2011
Сообщений: 21,250
09.01.2018, 16:36
Цитата Сообщение от V0fka Посмотреть сообщение
В чем разница?
Типы ищутся "изнутри", начиная с наибольшей вложенности (с некоторыми исключениями).
Пространство, подключенное "ближе" к месту использования будет просканировано на наличие типа раньше, чем пространство, подключенное "дальше".
1
86 / 13 / 1
Регистрация: 24.05.2010
Сообщений: 590
09.01.2018, 17:11  [ТС]
Спасибо всем за ответы! Задам уточняющий вопрос: когда может появиться необходимость подключать пространство имен внутри другого пространства имен? Ведь можно подключать в начале файла, тогда проблем с видимостью вроде быть не должно ни у кого.
0
Эксперт .NET
 Аватар для kolorotur
17810 / 12961 / 3381
Регистрация: 17.09.2011
Сообщений: 21,250
09.01.2018, 17:46
Цитата Сообщение от V0fka Посмотреть сообщение
когда может появиться необходимость подключать пространство имен внутри другого пространства имен?
Когда два класса с одинаковыми именами объявлены в двух разных пространствах, оба пространства подключены, но использовать нужно класс из какого-то конкретного пространства.
Как вариант для такого типа можно создать алиас.
3
 Аватар для ViterAlex
8947 / 4859 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
09.01.2018, 18:13
Цитата Сообщение от kolorotur Посмотреть сообщение
Когда два класса с одинаковыми именами объявлены в двух разных пространствах, оба пространства подключены, но использовать нужно класс из какого-то конкретного пространства.
Да-да-да. Пример из жизни: структура Point из System.Drawing (System.Drawing.dll) и из System.Windows (WindowsBase.dll). Для рисования используется System.Drawing, а для вычисления векторов нужно System.Windows. И чтобы не возникало проблем, System.Drawing подключается внутри твоего пространства имён, а System.Windows — снаружи:
C# Скопировано
1
2
3
4
5
6
7
8
9
10
using System.Windows;
namespace MyNameSpace
{
    using System.Drawing;
    class MyClass
    {
        Point pt = new Point();//Это возьмёт из System.Drawing и не перепутает с System.Windows.Point
        Vector v = new Vector();
    }
}
4
 Аватар для zewer
2356 / 1774 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
09.01.2018, 19:44
Цитата Сообщение от Someone007 Посмотреть сообщение
C# Скопировано
1
2
3
4
namespace MyNamespace1
  {
           using System.Text.RegularExpressions;
  }
Так писать вообще нельзя
0
Эксперт .NET
6520 / 4096 / 1606
Регистрация: 09.05.2015
Сообщений: 9,560
09.01.2018, 19:49
Цитата Сообщение от zewer Посмотреть сообщение
Так писать вообще нельзя
Да ладно, с чего бы это?
Там конечно ошибка была в примере, второе пространство имен по задумке должно было называться MyNamespace2 (отредактировать не получилось из-за тупых ограничений форума на редактирование постов в 5 минут), а в остальном все верно.
0
 Аватар для zewer
2356 / 1774 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
09.01.2018, 19:58
Someone007, если не ошибаюсь, Code Convention запрещает такую конструкцию.
Нельзя подключать директивы под пространством имен, только над!
0
 Аватар для dailydose
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
09.01.2018, 20:18
Цитата Сообщение от zewer Посмотреть сообщение
Someone007, если не ошибаюсь, Code Convention запрещает такую конструкцию.
Нельзя подключать директивы под пространством имен, только над!
нишо не знаю, по дефолту решарпер предлагает заменить

C# Скопировано
1
2
3
4
5
6
using System;
 
namespace ConsoleApp
{
 /* ... */
}
на
C# Скопировано
1
2
3
4
5
namespace ConsoleApp
{
    using System;
 /* ... */
}
и я как-то больше верю решарперу, нежели ноунеймам

Добавлено через 2 минуты
кстати, тут более годное обсуждение --> https://stackoverflow.com/ques... -namespace
0
 Аватар для zewer
2356 / 1774 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
09.01.2018, 20:19
dailydose, у меня так же стоит StyleCop, и он так же мне предлагает вставить под.
Уточнял у людей, "которые не ноунеймы", они сказали - "низзя".
1
 Аватар для dailydose
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
09.01.2018, 21:13
Цитата Сообщение от zewer Посмотреть сообщение
они сказали - "низзя".
ну хорошо, пойду стайлгайд почитаю

Цитата Сообщение от zewer Посмотреть сообщение
у меня так же стоит StyleCop, и он так же мне предлагает вставить под.
зачастую он и не правильно подсказывает некоторые моменты, я их отключаю чтобы впредь не отвлекаться на них
0
Эксперт .NET
 Аватар для Usaga
12876 / 8921 / 1323
Регистрация: 21.01.2016
Сообщений: 33,493
10.01.2018, 05:52
Цитата Сообщение от zewer Посмотреть сообщение
Уточнял у людей, "которые не ноунеймы", они сказали - "низзя".
Вы бы сами попробавали, что ли...
1
Эксперт .NET
 Аватар для Rius
11422 / 7303 / 1617
Регистрация: 25.05.2015
Сообщений: 22,072
Записей в блоге: 14
10.01.2018, 06:14
Using namespace directives

A using_namespace_directive imports the types contained in a namespace into the immediately enclosing compilation unit or namespace body, enabling the identifier of each type to be used without qualification.
Code Скопировано
1
2
3
using_namespace_directive
    : 'using' namespace_name ';'
    ;
Within member declarations in a compilation unit or namespace body that contains a using_namespace_directive, the types contained in the given namespace can be referenced directly. For example:
C# Скопировано
1
2
3
4
5
6
7
8
9
10
11
namespace N1.N2
{
    class A {}
}
 
namespace N3
{
    using N1.N2;
 
    class B: A {}
}
C# 6.0 draft specification - Namespaces
1
86 / 13 / 1
Регистрация: 24.05.2010
Сообщений: 590
10.01.2018, 15:10  [ТС]
Всем спасибо за ответы! Теперь вроде понятно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.01.2018, 15:10
Помогаю со студенческими работами здесь

Имя типа или пространства имен отсутствует в пространстве имен
Подскажите решение проблемы. Целиком код:

Имя типа или пространства имен отсутствует в пространстве имён
Доброго времени суток. Делаю пример SportsStore из книги "ASP.NET MVC 3 Framework с примерами на C# для профессионалов", Сандерс....

Обращение к приватному члену класса внутри пространства имён
Здравствуйте. Вот у меня есть код: #include <iostream> #include <conio.h> #include <vector> #include <string> using...

Не возникает ли коллизия имен, если использовать два пространства имен, и в каждом из них будут одноименные?
Вот например namespace nms1 { int gh; } namespace nms2 { int gh;

Имя типа или пространства имен "ProtectedData" отсутствует в пространстве имен System.Security.Cryptography
Такая проблема, пытаюсь собрать проект , но дает ошибки : по идее, они должны идти в комплекте ... поискал в гугле, он он кидает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Мульти-тенантные БД с PostgreSQL Row Security
Codd 23.04.2025
Современные облачные сервисы и бизнес-приложения всё чаще обслуживают множество клиентов в рамках единой программной инфраструктуры. Эта архитектурная модель, известная как мульти-тенантность, стала. . .
Реализация конвейеров машинного обучения с Python и Scikit-learn
AI_Generated 23.04.2025
Мир данных вокруг нас растёт с каждым днём, и умение эффективно обрабатывать информацию стало необходимым навыком. Специалисты по машинному обучению ежедневно сталкиваются с задачами предобработки. . .
Контроллеры Kubernetes Ingress: Сравнительный анализ
Mr. Docker 23.04.2025
В Kubernetes управление входящим трафиком представляет собой одну из ключевых задач при построении масштабируемых и отказоустойчивых приложений. Ingress — это API-объект, который служит вратами. . .
Оптимизация кода Python с Cython и Numba
py-thonny 23.04.2025
Python прочно обосновался в топе языков программирования благодаря своей простоте и гибкости. Разработчики любят его за читабельность кода и богатую экосистему библиотек. Но у этой медали есть и. . .
Микросервис на Python с FastAPI и Docker
ArchitectMsa 23.04.2025
В эпоху облачных вычислений и растущей сложности программных продуктов классическая монолитная архитектура всё чаще уступает место новым подходам. Микросервисная архитектура становится фаворитом. . .
Создаем веб-приложение на Vue.js и Laravel
Reangularity 23.04.2025
Выбор правильного технологического стека определяет успех веб-проекта. Laravel и Vue. js формируют отличную комбинацию для создания современных приложений. Laravel — это PHP-фреймворк с элегантным. . .
Максимальная производительность C#: Span<T> и Memory<T>
stackOverflow 22.04.2025
Мир высоконагруженных приложений безжалостен к неэффективному коду. Каждая миллисекунда на счету, каждый выделенный байт памяти может стать причиной падения производительности. Разработчики на C#. . .
JWT аутентификация в Java
Javaican 21.04.2025
JWT (JSON Web Token) представляет собой открытый стандарт (RFC 7519), который определяет компактный и самодостаточный способ передачи информации между сторонами в виде JSON-объекта. Эта информация. . .
Спринты Agile: Планирование, выполнение, ревью и ретроспектива
EggHead 21.04.2025
Спринты — сердцевина Agile-методологии, позволяющая командам создавать работающий продукт итерационно, с постоянной проверкой гипотез и адаптацией к изменениям. В основе концепции спринтов лежит. . .
Очередные открытия мега простых чисел, сделанные добровольцами с помощью домашних компьютеров
Programma_Boinc 21.04.2025
Очередные открытия мега простых чисел, сделанные добровольцами с помощью домашних компьютеров. 3 марта 2025 года, в результате обобщенного поиска простых чисел Ферма в PrimeGrid был найден. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер