я могу выставить класс из другого пространства имен .net как класс в моем пространстве имен? - PullRequest
3 голосов
/ 26 сентября 2008

Могу ли я представить класс из другого пространства имен .net как класс в моем пространстве имен? Я использую класс - antlr.collections.AST - в качестве возвращаемого типа для функции, принадлежащей классу в моем пространстве имен; в результате пользователь должен иметь

using antlr.collections;
using myNamespace;

вверху их файлов, чтобы использовать мою функцию. Могу ли я сделать myNamespace.AST псевдонимом для antlr.collections.AST, чтобы у пользователя был только

using myNamespace;

вверху их файлов?

Ответы [ 6 ]

4 голосов
/ 26 сентября 2008

Имейте в виду, что потребителям вашего кода на самом деле не понадобится , чтобы использовать операторы. Они призваны облегчить им жизнь, поэтому им не нужно вводить antlr.collections.Foo и antlr.collections.Bar по всему их источнику.

Большим «воздействием» (если оно действительно серьезное) является то, что потребителю вашего кода понадобится жесткая ссылка на сборку, в которой определен antlr.collections.

Однако, если это задокументировано заранее, я, честно говоря, не вижу в этом большой проблемы. Он ничем не отличается от потребителя DAL, сгенерированного SubSonic, нуждающегося в ссылках как на сгенерированную сборку DAL, так и на оригинальную сборку SubSonic. (И, вполне возможно, с использованием утверждений.)

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

2 голосов
/ 26 сентября 2008

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

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

2 голосов
/ 26 сентября 2008

Как насчет создания класса с тем же именем в новом пространстве имен? Я имел в виду:

namespace MyForms {
    class Class1 : Some.Other.Namespace.Class1 {
        // ...
    }
}
1 голос
/ 26 сентября 2008

Единственное решение - скрыть всю зависимость от типа antlr.collections.AST.

Для этой цели можно использовать Адаптер .

1 голос
/ 26 сентября 2008

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

Я думаю, что вы окажете плохую услугу разработчикам, которые используют вашу библиотеку, потому что они не обязательно будут знать, что то, с чем они действительно работают, является типом из antir.collections (не то, что я даже знаю, что это такое, но дело не в этом). Если разработчик приходит на StackOverflow.com в поисках информации об этом типе возвращаемых данных, с большей вероятностью он найдет информацию, если тип принадлежит «общей» библиотеке или вашей?

1 голос
/ 26 сентября 2008

Нет, вы не можете.

Полный путь и имя класса является частью его идентичности.

...