我可以将另一个 .NET 命名空间中的类暴露为我的命名空间中的类吗?

3

我能否将另一个.NET命名空间中的类作为我的命名空间中的类公开? 我在我的命名空间中的一个类的函数中使用antlr.collections.AST类作为返回类型; 因此,用户必须拥有

using antlr.collections;
using myNamespace;

为了使用我的函数,用户需要在文件的顶部包含antlr.collections.AST。那我能不能将myNamespace.AST设置为antlr.collcetions.AST的别名,这样用户只需引入我的namespace就可以了。

using myNamespace;

在他们的文件顶部?
6个回答

4
请记住,你的代码的使用者实际上不需要使用语句。这些存在是为了让他们的生活更加方便,这样他们就不必在源代码中反复输入antlr.collections.Foo和antlr.collections.Bar。
更大的“影响”(如果确实存在严重的影响)是你的代码的使用者将需要一个对定义antlr.collections的程序集的硬引用。
然而,如果事先记录好,我真的不认为这会是一个很大的问题。这与SubSonic生成的DAL的使用者需要引用生成的DAL程序集和原始的SubSonic程序集没有什么区别。(并且很可能还需要使用语句。)
依赖关系就是它们所是的。将类分成命名空间的主要原因是为了组织和减少命名冲突。由于我不知道你提到的命名空间中有哪些类,所以我不知道在你的情况下这种冲突有多大的可能性...但试图将类从一个命名空间移动到另一个命名空间,或者隐藏需要这样做的事实,通过从中派生一个空类,可能不是最好的想法。对于你的类的使用者来说,再添加一个引用和使用语句也不会有太大的影响。

用户肯定需要一个引用来定义antir.collections的程序集。 - Craig Eddy
太棒了! :) 我是在刚醒来后写的;我想我是在暗示我不知道它只是一个已经编写好的类,还是一个外部程序集...我会进行编辑! :) - John Rudy

2

创建一个继承您的新命名空间中的类的新类。虽然不是理想的方法,但它对于单元测试等非常有用。

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


2
如何在新命名空间中使用相同名称派生一个类?我的意思是:
namespace MyForms {
    class Class1 : Some.Other.Namespace.Class1 {
        // ...
    }
}

那样做是可行的,但除非原帖作者进一步阐述他的需求,否则可能无法解决他的任何问题。如果您进行is-testing等测试,它不一定看起来正确。 - Lasse V. Karlsen
一个派生类实例不应该运行'is'测试吗?我并没有写太多C#代码; 只是猜测它会工作。 - Agnel Kurian

1

不可以。

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


1

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

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


1

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

您可以使用适配器来实现此目的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接