什么样的访问修饰符可以应用于类?

Edw*_*uay 4 c# oop access-modifiers

经过一番研究后,我确定您可以应用于类的唯一访问修饰符是:

  • 公众 - 任何集会都有
  • internal - 仅在当前程序集中可用

但是下面的错误消息似乎暗示如果一个类没有在命名空间中定义,那么它可以被定义为private,protectedprotected internal.

public和internal是唯一可以在课堂上使用的类修饰符还是更多?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Test2343434
{
    class Program
    {
        static void Main(string[] args)
        {
            Tools.ToolManager toolManager = new Tools.ToolManager();

            Console.ReadLine();
        }
    }

}

namespace Tools
{
    //error: Elements defined in a namespace cannot be explicitly 
    //declared as private, protected, or protected internal
    private class ToolManager 
    {
        public ToolManager()
        {
            Console.WriteLine("inside tool manager");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 8

嵌套类型可以声明为private,protected或protected internal.您仍然可以将嵌套类型声明为公共或内部 - 只是您只能在嵌套时使用上述访问修饰符声明它们:

public class OuterClass
{
    private class PrivateNested {}
    protected class ProtectedNested {}
    protected internal class ProtectedInternalNested {}
    public class PublicNested {}
    internal class InternalNested {}
}
Run Code Online (Sandbox Code Playgroud)

请注意,您不能声明嵌套在一个类型structprotectedprotected internal因为它没有任何意义,这样做:)

public struct OuterStruct
{
    private class PrivateNested {}
    public class PublicNested {}
    internal class InternalNested {}
}
Run Code Online (Sandbox Code Playgroud)

C#不允许类型嵌套在接口中(遗憾的是,IMO - 它对代码契约很有用).

所有这些对于其他嵌套类型(枚举,结构,接口,委托)也是如此.