我可以将另一个.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;

在他们的文件顶部?

有帮助吗?

解决方案

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

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

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

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

其他提示

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

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

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

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

不,你不能。

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

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

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

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

您可以使用适配器

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top