代码之家  ›  专栏  ›  技术社区  ›  Edward Tanguay

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

  •  4
  • Edward Tanguay  · 技术社区  · 15 年前

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

    • 公众的
    • 内部的

    但是下面的错误消息似乎暗示 在可以定义为的命名空间中定义 私有的 , 受保护的 ,或 受保护的内部 .

    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");
            }
        }
    }
    
    4 回复  |  直到 15 年前
        1
  •  8
  •   Jon Skeet    15 年前

    嵌套类型可以声明为private、protected或protectedinternal。当然,您仍然可以将嵌套类型声明为public或internal,只是您可以这样做 只有

    public class OuterClass
    {
        private class PrivateNested {}
        protected class ProtectedNested {}
        protected internal class ProtectedInternalNested {}
        public class PublicNested {}
        internal class InternalNested {}
    }
    

    注意你 不能 声明嵌套在 struct protected protected internal 因为这样做毫无意义:)

    public struct OuterStruct
    {
        private class PrivateNested {}
        public class PublicNested {}
        internal class InternalNested {}
    }
    

    C#不允许在接口中嵌套类型(不幸的是,IMO—这对代码契约很有用)。

        2
  •  3
  •   Justin    15 年前

    MSDN page :

    命名空间中的类型声明可以具有公共或内部访问权限。 如果未指定可访问性,则默认为“内部”。

    命名空间中的类型声明对于外部程序集来说是公共的,或者是内部的(C不支持友元类之类的概念)。

        3
  •  3
  •   Daniel Rose    15 年前

    Accessibility Levels .

    “顶级”类(即不嵌套在另一个类中)只能是公共的或内部的。默认情况下(如果您没有声明任何内容),它是内部的。

        4
  •  0
  •   Brian Gideon    15 年前

    在这个问题的背景下,也许有意思的是,有一个不太为人所知的机制来 internal InternalsVisibleTo 属性。它不被任何拉伸视为访问修饰符之一,但具有操纵谁有访问权限的效果。这个概念被称为友元程序集。

    推荐文章