错误"在命名空间中定义的元素不能显式声明为private,protected或protected internal"

use*_*510 56 .net c#

我试图将一个类设为私有,并得到此错误"在命名空间中定义的元素不能显式声明为私有,受保护或受保护的内部"

我明白了它的含义,但我想问为什么不允许这样做?所有访问修改是否都不适用于Class?为什么我不能将课程设为私人,受保护或受保护的内部?

DeC*_*Caf 74

因为private意味着该成员仅在包含类中可见.由于顶级类没有包含它的类,因此它不能是私有的(或受保护的).(但内部或公共是有效的修饰符).

您希望私人在顶级课程中意味着什么?

当然,所有修饰符都适用于嵌套类,即在另一个类中定义的类.

  • 如果我希望某个类仅对特定命名空间中的类可见,该怎么办?如何做到这一点,而不必将课程移到另一个? (3认同)
  • 基本上你不能.如果你问我,这将是一个奇怪的功能,因为例如,多个程序集中可以存在相同的命名空间. (2认同)

Joh*_*ohn 13

您只能使用publicinternal在命名空间级别使用


SNa*_*Nag 5

正如 Abatonime 所说,您只能在 Namespace 级别使用publicinternal
privateprotected、 或protected internal只能用于类级别。

这有效

namespace X
{
    class A
    {
        // class code here

        private class B // this class is an inner class
        {
            // class code here
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这不会

namespace X
{
    class A
    {
        // class code here
    }

    private class B // this is a class inside a namespace
    {
        // class code here
    }
}
Run Code Online (Sandbox Code Playgroud)