Проблема со ссылкой на библиотеку классов - PullRequest
1 голос
/ 13 июня 2010

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

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

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

Ответы [ 6 ]

3 голосов
/ 13 июня 2010

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

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

using System.Collections.Generic;

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

2 голосов
/ 13 июня 2010

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

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

Но давайте поясним, размещение классов в System. * плохая идея.

2 голосов
/ 13 июня 2010

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

Вторая причина, вероятно, заключается в том, что вы не видите свой код.

1 голос
/ 13 июня 2010

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

1 голос
/ 13 июня 2010

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

0 голосов
/ 13 июня 2010

На случай, если неясно: это ДЕЙСТВИТЕЛЬНО плохая идея.

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

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

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

...