gpt4 book ai didi

c# - 如何跨越多个程序集的 C# 命名空间?

转载 作者:行者123 更新时间:2023-12-04 16:52:39 27 4
gpt4 key购买 nike

单线问题没有意义,所以让我详细说明我的挑战:

我创建了 3 个 DLL( MyUtils、MyConnector、MyAgent ),每个都包含自己的一组“内部”类、类型和成员。所有的类、类型和成员都是它们各自的默认命名空间(与它们的程序集名称相同)。

  • MyAgent 需要添加对 MyConnector 的引用并使用它的一些类。 MyConnector 需要添加对 MyUtils 的引用并使用它的一些类。
    就目前而言,MyAgent 可能还需要访问 MyUtils 中的某些类型。

    现在,由于 MyUtils 中的所有类型和成员都是内部的,我无法将其添加为对 MyConnector 的引用,同样从 MyConnector 到 MyAgent。我不想公开任何这些类型,因为我不希望使用我的 DLL 的应用程序直接访问它们。

    我知道理论上可以跨越多个程序集的命名空间,但不清楚如何实际实现上述场景。
  • 最后,我只想部署要在 EXE 中使用的 MyAgent.dll。该 EXE 应该只能访问 MyAgent 中的公共(public)类型,但有一个异常(exception):MyConnection 对象(包含在 MyConnector 中的类型)将从 MyAgent 方法返回。再次,我的访问说明符(内部)限制了这种可能性。

  • 我一直在过度思考这个问题,以至于我现在完全糊涂了。非常感谢有经验的程序员的一些指导。

    提前致谢。

    最佳答案

    跨越多个程序集的命名空间非常简单:

    程序集 1 中的 file1.cs:

    namespace MyNamespace { ... }

    assembly2 中的 file2.cs:
    namespace MyNamespace { ... }

    然而,这根本不会帮助你,因为 intenal access-modifier 将使您的成员对同一程序集中的任何类可见,而不管它们的命名空间如何。因此,即使您在 assembly1 中有两个命名空间,您也可以访问 assembly1.MyNamespace 中声明的所有内部成员。 ,但不是 assembly2.MyNamespace 内的那些.

    所以你必须制作它们 public以便从其他程序集访问它们。或者,您也可以命名一个所谓的“ friend 程序集”,它也可以从另一个程序集访问内部成员。为此,请添加 InternalsVisibleTo(fullNameForAssembly2) 到您的代码。

    关于c# - 如何跨越多个程序集的 C# 命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47594659/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com