3

我可以将另一个 .net 命名空间中的类公开为我的命名空间中的类吗?我使用一个类——antlr.collections.AST——作为属于我的命名空间中一个类的函数的返回类型;因此,用户必须拥有

using antlr.collections;
using myNamespace;

在他们文件的顶部,以便使用我的功能。我可以让 myNamespace.AST 成为 antlr.collections.AST 的别名,这样用户只需拥有

using myNamespace;

在他们文件的顶部?

4

6 回答 6

4

请记住,您的代码的使用者实际上不需要使用 using 语句。这些是为了让他们的生活更轻松,所以他们不必在源代码中输入 antlr.collections.Foo 和 antlr.collections.Bar。

更大的“影响”(如果确实存在严重影响)是您的代码的使用者将需要对定义 antlr.collections 的程序集的硬引用。

但是,如果这是预先记录的,老实说,我认为这不是什么大问题。它与需要对生成的 DAL 程序集和原始 SubSonic 程序集的引用的 SubSonic 生成的 DAL 的消费者没有什么不同。(而且,很可能,也使用语句。)

依赖关系就是它们。将类分解为命名空间是有原因的——主要是为了组织和减少命名冲突。不知道你提到的命名空间中有哪些类,我不知道在你的场景中这种冲突实际上有多大可能......但是试图将类从一个命名空间移动到另一个命名空间,或者隐藏需要这样的事实通过从中派生一个空白类,可能不是最好的主意。拥有另一个引用和使用语句不会杀死您班级的消费者。

于 2008-09-26T11:10:07.993 回答
2

在新命名空间中使用相同名称派生一个类怎么样?我的意思是:

namespace MyForms {
    class Class1 : Some.Other.Namespace.Class1 {
        // ...
    }
}
于 2008-09-26T10:29:02.507 回答
2

创建一个继承新命名空间中的类的新类。这并不理想,但它对单元测试等很有用。

但是,您应该考虑为什么要这样做,类被分解为命名空间是有原因的。

于 2008-09-26T10:38:00.923 回答
1

不,你不能。

类的完整路径和名称是其身份的一部分。

于 2008-09-26T10:33:20.013 回答
1

如果您从该类派生并返回您的派生类,您将自己负责提供返回类型的所有文档。

我认为你会对使用你的库的开发人员造成伤害,因为他们不一定知道他们真正使用的是来自 antir.collections 的类型(我什至不知道那是什么,但那不是点)。如果开发人员来到 StackOverflow.com 搜索有关该返回类型的信息,他们是否更有可能找到来自“通用”库或来自您的类型的信息?

于 2008-09-26T11:57:06.137 回答
1

唯一的解决方案是隐藏对 antlr.collections.AST 类型的整个依赖。

您可以为此目的使用适配器。

于 2008-09-26T13:57:20.483 回答