【问题标题】:can I expose a class from another .net namespace as a class in my namespace?我可以将另一个 .net 命名空间中的类公开为我命名空间中的类吗?
【发布时间】:2008-09-26 10:26:11
【问题描述】:

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

using antlr.collections;
using myNamespace;

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

using myNamespace;

在他们文件的顶部?

【问题讨论】:

    标签: c# .net namespaces


    【解决方案1】:

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

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

    但是,如果事先记录在案,老实说,我认为这不是什么大问题。它与需要对生成的 DAL 程序集和原始 SubSonic 程序集的引用的 SubSonic 生成的 DAL 的消费者没有什么不同。 (而且很可能还使用语句。)

    依赖关系就是它们。将类分解为命名空间是有原因的——主要是为了组织和减少命名冲突。不知道你提到的命名空间中有哪些类,我不知道在你的场景中这种冲突实际上有多大可能......但是试图将类从一个命名空间移动到另一个命名空间,或者隐藏需要这样的事实通过从中派生一个空白类,可能不是最好的主意。拥有另一个引用和 using 语句不会杀死您班级的消费者。

    【讨论】:

    • 用户肯定需要对定义 antir.collections 的程序集的引用。
    • 触摸! :) 我是在醒来后写的;我想我是在暗示这样一个事实,即我不知道它是否只是一个已编写的类,还是一个外部程序集......我会编辑它! :)
    【解决方案2】:

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

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

    【讨论】:

    • 这可行,但除非原始发帖人扩展他的需求,否则可能无法解决他的任何问题。如果你做 is-testing 等它看起来不一定正确。
    • 不应该对派生类实例进行“是”测试吗?我不怎么做 C#;只是猜测它会起作用。
    【解决方案3】:

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

    你应该想想你为什么要这样做,类被分解成命名空间是有原因的。

    【讨论】:

      【解决方案4】:

      不,你不能。

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

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

          您可以为此目的使用Adapter

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-02-13
            • 2012-05-27
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多