【问题标题】:Default access modifier in C#C# 中的默认访问修饰符
【发布时间】:2011-04-10 04:30:40
【问题描述】:

如果我要创建一个像下面这样的新对象,它会默认使用哪个访问修饰符?

Object objectA = new Object();

【问题讨论】:

    标签: c# object access-modifiers


    【解决方案1】:

    类的访问说明符是内部的。

    变量的访问说明符是私有的。

    【讨论】:

      【解决方案2】:

      默认是私有的。

      َََََ

      【讨论】:

        【解决方案3】:

        任何成员都将始终拥有最严格的可用成员 - 因此在这种情况下,objectA 的可访问性是 private。 (假设它是一个实例变量。作为局部变量没有任何意义,因为它们本身没有任何访问规则。)

        所以这个:

        class Foo
        {
            Object objectA = new Object();
        }
        

        等价于:

        internal class Foo
        {
            private Object objectA = new Object();
        }
        

        “默认为最私有”意味着对于类型,可访问性取决于上下文。这个:

        class Outer
        {
            class Nested
            {
            }
        }
        

        等价于:

        internal class Outer
        {
            private class Nested
            {
            }
        }
        

        ...因为你不能有一个私有的非嵌套类。

        只有一个地方添加显式访问修饰符可以使某些东西比没有它时更私密,那就是在属性声明中:

        public string Name { get; set; } // Both public
        
        public string Name { get; private set; } // public get, private set
        

        【讨论】:

        • 似乎您应该在其中一个类中包含一个实际的成员字段,并表明它也可以转换为private,不是吗?在我看来,这是 OP 的主要问题:成员字段的可访问性。
        • @Dan:第一句不是解释了吗?该示例旨在演示 types 的默认访问如何根据上下文而变化。在回答第一句话中的实际问题后,这是额外的信息。
        • @Jon:是的,我只是认为将它包含在实际的代码示例中会特别说明问题;就这样。我认为你展示有和没有修饰符的代码之间的等价性很好。
        • 作为一项规则,我一直说应该明确声明访问修饰符(我认为 StyleCop 在这一点上同意我的观点)。顺便说一句,在“私有”意味着在其自身范围之外无法访问的前提下,“私有”和“内部”在外部类上是否在技术上不等效,因为它的范围是程序集本身?
        • @Dan:我个人认为已经很清楚了,但我添加了一个额外的例子。
        【解决方案4】:

        对于类成员和结构成员,包括嵌套类和结构,private 是默认值。

        对于类和结构——内部是默认的

        您可以查看MSDN 以进一步阅读..

        【讨论】:

        • 玛尼玛哈弗! eifo ata gar? ani garti be kiryat gat.
        • raziti laasot masheu naim leha。 ani ihaol livhor lemi latet et nekudot。哈弗。 lo garti be israel 6 shanim, ve ze haia naim meod lepagesh po mishehu mi aaretz.
        • 所以你可以给我发电子邮件。 orenab1@gmail.com。但是你不能更喜欢我的答案而不是更好的答案。而且你不能在这里使用非英语语言。尊重家规 (-:
        【解决方案5】:

        类和结构默认声明为内部的!

        阅读更多here

        【讨论】:

        • 嵌套类型不是...看我的回答。
        • OP 询问的是对象,而不是类型。
        【解决方案6】:

        类/类型本身将默认为“内部”。您创建的对象将默认为“私有”。

        【讨论】:

          【解决方案7】:
          void Foo()
          {
              // private in method scope
              Object objectA = new Object();
          }
          
          class Bar()
          {
              // private in class scrope
              Object objectA = new Object();
          }
          

          【讨论】:

            【解决方案8】:

            作为班级成员:private

            如果它是在方法体中声明的局部变量,则它在该方法之外没有可访问性。但我猜你已经知道了。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-06-10
              • 2012-03-03
              • 1970-01-01
              • 2011-02-01
              • 2011-04-13
              • 2021-12-26
              相关资源
              最近更新 更多