Ответ 1
Насколько я знаю, они используются для двух вещей:
• Чтобы структурировать проект в значимые части
• Чтобы различать классы с тем же именем
Это в основном это. Я бы добавил к вашей первой точке, что пространства имен предоставляют структуру больше, чем структуру проекта, поскольку пространства имен могут охватывать проекты и сборки. Я бы добавил к вашему второму вопросу, что основной целью пространств имен является добавление структуры в библиотеки , чтобы стало легче находить нужные вам вещи и избегать ненужных вам материалов.. То есть пространства имен являются удобными для пользователя библиотеки, а не для удобства его создателей.
Вторичная цель - устранить конфликты имен. Название столкновения на практике довольно редко. (Если основной целью пространств имен было устранение неоднозначности коллизий, то можно предположить, что в библиотеках базового класса будет намного меньше пространств имен!)
Есть ли какие-либо другие вопросы, которые следует учитывать при использовании пространств имен?
Да. Существует множество аспектов для исправления использования пространств имен. Например:
- Нарушение стандартных соглашений об именах может вызвать путаницу. В частности, не называйте класс таким же, как его пространство имен! (Подробнее см. Ссылку ниже.)
- использование пространства имен может привести к использованию методов расширения, которые вы не ожидали; будьте осторожны.
- где именно применяется директива "using", может тонко изменять правила разрешения в мире, где есть столкновения имен; эти ситуации редки, но сбивают с толку, когда они возникают.
- часто возникают столкновения в контекстах, где машинный код взаимодействует с человеческим кодом; будьте осторожны в таких ситуациях, особенно если вы пишете генератор кода. Будьте очень защитными; вы не знаете, какие сумасшедшие столкновения имен создаст человек, создающий созданную человеком половину.
См. мои статьи по этому вопросу для более подробной информации:
http://blogs.msdn.com/b/ericlippert/archive/tags/namespaces/
Также см. также Руководство по разработке рамок для дополнительных мыслей о правильных и неправильных соглашениях для использования пространства имен.
Они влияют на производительность или что-то в этом роде?
Почти никогда. Пространства имен - это вымысел языка С#; система базового типа не имеет "пространства имен". Когда вы скажете
using System;
...
class MyException : Exception
...
нет класса с именем "Исключение". Имя класса - "System.Exception" - имя имеет период в нем. CLR, рефлексия и язык С# все замышляют, чтобы вы считали, что класс называется "Исключение", и он находится в пространстве имен "Система", но на самом деле нет такого зверя, как пространство имен, когда вы заходите за сцену. Это просто соглашение, что вы иногда можете опустить "Систему". от имени "System.Exception".