Подтвердить что ты не робот

Использование пространств имен в С#

Мне было интересно, какова цель Пространств имен в С# и других языках программирования...

Насколько я знаю, они используются для двух вещей:

  • Чтобы структурировать проект в значимые части
  • Чтобы отличить классы с тем же именем

Мой вопрос: есть ли какие-либо другие вещи, которые следует учитывать при использовании пространств имен? Они влияют на производительность или что-то в этом роде?

4b9b3361

Ответ 1

Насколько я знаю, они используются для двух вещей:

• Чтобы структурировать проект в значимые части

• Чтобы различать классы с тем же именем

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

Вторичная цель - устранить конфликты имен. Название столкновения на практике довольно редко. (Если основной целью пространств имен было устранение неоднозначности коллизий, то можно предположить, что в библиотеках базового класса будет намного меньше пространств имен!)

Есть ли какие-либо другие вопросы, которые следует учитывать при использовании пространств имен?

Да. Существует множество аспектов для исправления использования пространств имен. Например:

  • Нарушение стандартных соглашений об именах может вызвать путаницу. В частности, не называйте класс таким же, как его пространство имен! (Подробнее см. Ссылку ниже.)
  • использование пространства имен может привести к использованию методов расширения, которые вы не ожидали; будьте осторожны.
  • где именно применяется директива "using", может тонко изменять правила разрешения в мире, где есть столкновения имен; эти ситуации редки, но сбивают с толку, когда они возникают.
  • часто возникают столкновения в контекстах, где машинный код взаимодействует с человеческим кодом; будьте осторожны в таких ситуациях, особенно если вы пишете генератор кода. Будьте очень защитными; вы не знаете, какие сумасшедшие столкновения имен создаст человек, создающий созданную человеком половину.

См. мои статьи по этому вопросу для более подробной информации:

http://blogs.msdn.com/b/ericlippert/archive/tags/namespaces/

Также см. также Руководство по разработке рамок для дополнительных мыслей о правильных и неправильных соглашениях для использования пространства имен.

Они влияют на производительность или что-то в этом роде?

Почти никогда. Пространства имен - это вымысел языка С#; система базового типа не имеет "пространства имен". Когда вы скажете

using System;
...
class MyException : Exception 
...

нет класса с именем "Исключение". Имя класса - "System.Exception" - имя имеет период в нем. CLR, рефлексия и язык С# все замышляют, чтобы вы считали, что класс называется "Исключение", и он находится в пространстве имен "Система", но на самом деле нет такого зверя, как пространство имен, когда вы заходите за сцену. Это просто соглашение, что вы иногда можете опустить "Систему". от имени "System.Exception".

Ответ 2

Вы затронули две основные причины. Это старая статья из MSDN, но она по-прежнему применяется: Правила именования пространства имен

В мире Java практика именования заключается в том, чтобы отменить доменное имя компании, которая владеет продуктом, и после этого включить название продукта. Так com.example.product может быть допустимым пространством имен, но вы действительно не видите этого в .NET так много.

Ответ 3

Согласно MSDN пространство имен имеет следующие свойства:

  • Они организуют проекты с большим кодом.
  • Они ограничены. оператор.
  • Директива using означает, что вам не нужно указывать имя пространства имен для каждого класса.
  • Глобальное пространство имен является пространством имен "root": global::System всегда будет ссылаться на пространство имен .NET Framework System.

Во-вторых, пространство имен не имеет ничего общего с производительностью, но если вы создали свое собственное пространство имен, вы должны следовать соглашениям в рамках проекта.

Ответ 4

Это не влияет на производительность. Но для чтения кода я рекомендовал бы удалить ненужные с помощью операторов

Ответ 5

Пространства имен - это концепция, выведенная из более ранних технологий, таких как XML. Пространство имен предоставляет контекст вашим классам, позволяя вам сказать объект CUstomer в вашем домене и в вашем коде данных.

Вы также можете использовать пространства имен в псевдониме, который все еще выполняет вышеуказанное, но допускает более короткое именование для конкретного объекта.

domain.customer против data.customer

Ответ 6

Те самые большие.

На самом деле нет преимуществ по производительности. По крайней мере, не напрямую. без рамки пространств имен придется искать намного больше мест, чтобы найти код, который вы пытаетесь включить. Было бы почти похоже на загрузку ENTIRE.NET для каждого проекта. Ну, не совсем, но это достаточно близко для этого обсуждения.