我不确定为什么枚举必须是 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
。所以选项:
只是为了解释为什么如果
TestClass
是公开的,您当前的代码会被破坏:委托(delegate)是公开的,因此在当前程序集之外可见。这意味着它的所有参数和返回类型也必须可见。不要忘记 C# 中成员的默认访问级别始终是“可以为该成员显式指定的最严格的访问级别” - 因此对于顶级类型(包括枚举),默认可访问性是
internal
.关于c# - 命名空间级别的枚举 - 仍然需要公开吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5417995/