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

时间:2020-03-06 14:46:36  来源:igfitidea点击:

我可以将另一个.net命名空间中的类公开为我的命名空间中的类吗?我将antlr.collections.AST类用作属于我的命名空间中的类的函数的返回类型。结果,用户必须

using antlr.collections;
using myNamespace;

在其文件的顶部,以便使用我的功能。我可以将myNamespace.AST用作antlr.collections.AST的别名,以便用户只需要具有

using myNamespace;

在文件的顶部?

解决方案

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

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

不,你不能。

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

创建一个新类,该类继承新名称空间中的类。这不是理想的方法,但是对单元测试等有用。

我们应该考虑一下为什么这样做,由于某种原因,类被分解为名称空间。

请记住,代码的使用者实际上不需要使用using语句。它们在那里使他们的生活更轻松,因此不必在其整个源中都键入antlr.collections.Foo和antlr.collections.Bar。

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

但是,如果预先记录了这些信息,那么老实说,我认为这并不是一个大问题。这与SubSonic生成的DAL的使用者没有什么不同,后者需要同时引用生成的DAL程序集和原始SubSonic程序集。 (并且很可能也使用语句。)

依赖就是它们。将类分为名称空间是有原因的-主要是为了组织和减少命名冲突。不知道我们提到的命名空间中有哪些类,我也不知道这种情况在场景中实际发生的可能性有多大……而是试图将类从一个命名空间移至另一个命名空间,或者试图掩盖需要这样做的事实。从中派生一个空白类可能不是最好的主意。使用另一个引用和using语句不会杀死类的使用者。

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

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

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

我们可以为此使用适配器。