我不确定为什么枚举必须是 public 才能与委托(delegate)一起使用。我假设在命名空间级别时,整个应用程序都可以访问它,因为它在范围内。

namespace Test
{

  enum Days
  {
    Monday,Tuesday
  }

 class TestingClass
  {
    public delegate void DelTest(Days d)    /// ERROR, type enum is less accessible
  }
}

最佳答案

您的委托(delegate)类型实际上是在 internal 类中声明的,因此它实际上也是内部的(在某种意义上,无论如何)。这就是为什么如图所示的示例将编译(在添加分号之后)。为了让它中断,你还必须公开 TestingClass 。所以选项:

  • 保持如图所示
  • 如果您希望 TestingClass 为 public
  • 使委托(delegate)显式为内部
  • 使枚举显式公开,如果您希望所有内容都公开

  • 只是为了解释为什么如果 TestClass 是公开的,您当前的代码会被破坏:委托(delegate)是公开的,因此在当前程序集之外可见。这意味着它的所有参数和返回类型也必须可见。

    不要忘记 C# 中成员的默认访问级别始终是“可以为该成员显式指定的最严格的访问级别” - 因此对于顶级类型(包括枚举),默认可访问性是 internal .

    关于c# - 命名空间级别的枚举 - 仍然需要公开吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5417995/

    10-13 06:56