c# - 命名空间级别的枚举 - 仍然需要公开吗?

标签 c# delegates enums namespaces

我不确定为什么枚举必须公开才能与委托(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 公开,则将委托(delegate)显式设置为内部
  • 如果您希望所有内容都公开,请明确公开枚举

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

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

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

相关文章:

c# - 使用 log4net 和 xUnit

c# - 如何在 int64 中适应结构?

c# - 基于服务的系统中 session (跟踪)ID 的设计模式?

c# - Array.Find 与委托(delegate)。如果没有找到返回什么?

ios - 如何在 ViewController 之间传递委托(delegate)

php - 在哪里放置/如何处理 Laravel 中的枚举?

c# - C#中的指针?

将多个 ViewController 推送到 NavigationController 堆栈时的 iOS 委托(delegate)问题

swift - 枚举类的初始化和将TemperatureUnit.Kelvin分配给self(self = .Kelvin)的困惑

java - 属于特定类型的枚举