我可以将另一个.net命名空间中的类作为我的命名空间中的类公开吗?

时间:2008-09-26 10:26:12

标签: c# .net namespaces

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

using antlr.collections;
using myNamespace;

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

using myNamespace;

在他们的文件顶部?

6 个答案:

答案 0 :(得分:4)

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

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

但是,如果事先记录在案,我真的不认为这是一个大问题。它与SubSonic生成的DAL的消费者没有什么不同,需要参考生成的DAL组件和原始的SubSonic组件。 (并且很可能也使用语句。)

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

答案 1 :(得分:2)

如何在新命名空间中使用相同的名称派生类?我的意思是:

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

答案 2 :(得分:2)

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

你应该考虑为什么要这样做,但是由于某种原因,类被分解为命名空间。

答案 3 :(得分:1)

不,你不能。

类的完整路径和名称是其标识的一部分。

答案 4 :(得分:1)

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

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

答案 5 :(得分:1)

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

你可以使用Adapter这个目的。