2010-06-13 2 views
1

Я создаю библиотеку классов и использую пространство имен по умолчанию как «Система». Предположим, что я создаю общую структуру данных, например PriorityQueue, и помещаю ее в пространство имен System.Collections.Generic.Проблема с библиотекой классов

Теперь, когда я ссылаюсь на эту библиотеку из другого проекта, я больше не вижу PriorityQueue в пространстве имен System.Collections.Generic. Хотя в библиотеке есть ссылка, я не могу получить доступ к каким-либо из классов в ней.

Может кто-нибудь пролить свет на него, пожалуйста. Я знаю, что если я изменил пространство имен, все будет в порядке, но я хочу создать бесшовную интеграцию, такую ​​как .net framework, с другим проектом, чтобы можно было отнести библиотеку и забыть о ее пространствах имен.

+1

Не уверен, почему это было отклонено, это может быть плохая идея, но это не плохой вопрос. – msarchet

+0

Хотя добавление к системному пространству имен - плохая идея, я полагаю, что знание того, как это сделать, интересно. – apoorv020

+1

Возможный дубликат [Проблема с библиотекой классов] (http://stackoverflow.com/questions/3033042/class-library-reference-problem) –

ответ

2

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

Вторая причина, вероятно, в том, почему вы не можете видеть свой код.

2

Если вы используете пространство имен System для своих классов, то они будут найдены в System.

Если вы хотите, чтобы их можно было найти в System.Collections.Generic, вам необходимо их разместить.

Но давайте будем ясно, размещая классы в Системе. * Плохая идея.

1

Просто создайте собственное пространство имен, например. Anindya.Collections.Generic, поскольку размещение классов в предопределенных пространствах имен фреймов не является хорошей идеей. MS может ввести один и тот же класс в более позднюю структуру, что приведет к проблемам.

3

Это очень плохая идея. Представьте, что вы не придумали это и используете реальное пространство имен.

У вас нет «бесшовной интеграции» с .NET Framework. Если мы хотим получить доступ к List<T> класса, то мы должны написать

using System.Collections.Generic; 

Если вы поместите свой класс в MyCompany.Collections.Generic, то вы получите точно такой же уровень «цельность», который достигается с помощью .NET Framework сам.

+0

Я очень хорошо знаю, что смена пространства имен будет работать, и это то, что я делаю долго. Но на этот раз я сделал эксперимент, и это не удалось. Мой вопрос в том, что mscorlib и System.dll разделяют одно и то же пространство имен, но почему не могут мои? Это был мой первоначальный вопрос. Извините за нечеткость. –

+0

@Anindya Chatterjee Что делать, если все пытались использовать вашу идею? –

0

Если это было непонятно: это ДЕЙСТВИТЕЛЬНО Плохая идея.

Пространство имен системы должно считаться зарезервированным и verboten. Если Microsoft решит внедрить класс в обновление структуры, которое в будущем будет конфликтует с вашим идентификатором System.mycrap.blah, у вас будет довольно сложный рефакторинг на ваших руках, а в случае приложения, развернутого на клиент, аварийное обновление и потенциальную ответственность за простоя системы.

Вы не создали бы свой собственный класс под названием «String». Точно так же (каламбур) не используйте зарезервированные пространства имен.

Кроме того, пространство имен «Система» на самом деле не описывает содержимое вашего пространства имен. Как правило, пространства имен должны означать что-то вроде BlogEngine, DatabaseCore и т. Д. Шлепание всего в System во многом напоминает имена всех ваших переменных «x» или «temp», и подразумевает, что создатель действительно не понимает точку этот уровень разграничения и организации кода.

1

Кто-нибудь еще упоминал, что это плохая идея? Есть несколько причин, по которым вы не сможете увидеть класс. Короткая ссылка на сборку, есть только одна хорошая: вы забыли объявить класс публикой.

+0

+1 для фактического упоминания причины, что класс не будет виден. –

+0

:) Извините, что это не тот случай. –

Смежные вопросы