我可以将另一个.net命名空间中的类作为我的命名空间中的类公开吗?
我可以将另一个.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类型。
我们可以为此使用适配器。