Могу ли я представить класс из другого пространства имен .net как класс в моем пространстве имен?

StackOverflow https://stackoverflow.com/questions/138638

  •  02-07-2019
  •  | 
  •  

Вопрос

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

using antlr.collections;
using myNamespace;

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

using myNamespace;

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

namespace MyForms {
    class Class1 : Some.Other.Namespace.Class1 {
        // ...
    }
}

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

Однако вам следует подумать, почему вы это делаете: классы не зря разбиваются на пространства имен.

Нет, ты не можешь.

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top