Это общеизвестно ( и условное обозначение ), что пространства имен используются для уникальной идентификации кода и предотвращения конфликтов имен, поэтому вы всегда должны размещать свои собственный код в уникальном пространстве имен, насколько это возможно.
Но , ...
Пространства имен также используются для группировки логически релевантных классов вместе. Моя личная библиотека просто распространяется на Framework Class Library (FCL) и реализует все функции, которые мне не хватает в FCL. Он содержит в основном расширенные и вспомогательные классы и другие классы, которые можно многократно использовать. Я считаю, что было бы очень полезно следовать той же структуре пространств имен, что и в FCL.
Я пошел на один шаг дальше и начал использовать пространства имен FCL, чтобы «внедрить» мой код в пространства имен, где я действительно их ожидал.
Одним из преимуществ является то, что вам не нужно определять столько употреблений. Например. просто ссылаясь на библиотеку, методы расширения сразу становятся доступны без добавления дополнительных значений. В качестве хорошего примера (для тех, кто любит хранить в чистоте свой список использования), как часто вы ожидаете, что методы расширения будут работать, только чтобы понять, что вы не добавили «using System.Linq;» еще
UPDATE
Итак, основное преимущество, которое я считаю (как упоминалось в комментариях), заключается в том, что у вас есть доступ к большему количеству утилит без необходимости искать определенные пространства имен. Например. Если вы используете System.Collections.Generic
, сразу доступны методы расширения для IList<T>
.
Я утверждаю, что это преимущество может перевесить недостатки. Меня не беспокоит тот факт, что в будущем могут произойти конфликты имен, поскольку это будет означать, что новая версия FCL на самом деле включает в себя нечто подобное, как я и хотел. Это на самом деле облегчает замечать изменения в FCL, которые я все равно хотел бы отразить в своих пространствах имен.
Конечно, я понимаю, что это пошло бы радикально неправильно, если бы все начали делать это для публичных библиотек, но для моих индивидуальных проектов я считаю это действительно полезным.
Я пропускаю какие-либо другие недостатки? Я уже рассмотрел вопрос: если я хочу сделать библиотеку общедоступной, мне нужно найти способ разрешить использование пространства имен System
или другое пространство имен по желанию пользователя. Единственный известный мне способ сделать это из среды .NET - это с использованием предиректив .
ОБНОВЛЕНИЕ 2 :
Итак, как я уже сказал, я понимаю, что некоторые люди могут счесть это неудобным и захотят другое пространство имен. Для моих собственных проектов я считаю неудобным, например, следующее:
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media
using System.Windows.Media.Media3D;
using MyNamespace.Windows;
using MyNamespace.Windows.Controls;
using MyNamespace.Windows.Media;
using MyNamespace.Windows.Media.Media3D;
Не говоря уже о эта проблема , которая делает, например, using MyNamespace.System.Windows;
невозможно.
Чтобы сформулировать вопрос, который, как мы надеемся, даст более полезные ответы:
Есть ли решение для решения этой проблемы лучше, чем размещение кода в пространстве имен системы? Существует ли способ скомпилировать другое пространство имен при желании, кроме использование предирективов, или это вообще плохая идея?