类是.net中的私有或内部默认值?

时间:2013-02-02 09:27:05

标签: c# .net

  

可能重复:
  Why Visual Studio doesn’t create a public class by default?

msdn链接告诉我们

http://msdn.microsoft.com/en-us/library/ba0a1yw2.aspx

Class的默认成员可访问性是私有的

默认情况下请说明是内部还是私人?

5 个答案:

答案 0 :(得分:8)

所有成员的默认值是“您可以指定的最私密” 1

默认情况下,嵌套类型为private,但默认情况下顶级类型为internal

namespace Foo
{
    class ThisIsInternal
    {
        class ThisIsPrivate
        {
        }
    }
}

所有类型的规则都是相同的 - 无论是类,接口,结构,枚举还是委托都无关紧要。


1 ,除了特定的属性getter / setter之外,当你使其更私密时,你只能 明确属性的一部分。

// The getter is public, the setter is private
public string Foo { get; private set; }

答案 1 :(得分:2)

  

Class的默认成员可访问性是私有的

您将成员(nested class)辅助功能与non-nested类辅助功能混淆。我从问题中给出的链接中提取了以下内容。

  

顶级类型(不嵌套在其他类型中)只能有   内部或公共可访问性。这些的默认可访问性   类型是内部的,reference

默认情况下,嵌套类可访问性是私有的。

答案 2 :(得分:2)

在您提到的文章中,很明显,如果类位于另一个类中,默认情况下访问权限将为私有可以更改访问级别

无法将顶级课程设为私人

答案 3 :(得分:1)

这是我们的测试科目:

class AccessibilityTest
{
    class Nested {}
    struct NestedStruct {}
    enum NestedEnum { A }
    int Field;
    void Method() {}
}

使用Visual Studio 2012编译类,然后在一个最喜欢的反射工具中反编译。结果是:

internal class AccessibilityTest
{
    private class Nested
    {
    }
    [StructLayout(LayoutKind.Sequential, Size = 1)]
    private struct NestedStruct
    {
    }
    private enum NestedEnum
    {
        A
    }
    private int Field;
    private void Method()
    {
    }
}

可以看出,默认情况下,顶级类型为内部。默认情况下,嵌套成员私有

答案 4 :(得分:1)

默认情况下,某个类有时是内部的(顶级),有时是私有的(嵌套时),这似乎很奇怪。但是,这仅仅意味着默认情况下所有访问修饰符都是最大限制的。这也意味着几乎私有一词的所有用法都是多余的 - 只有属性访问者的用法才有意义(他们可以限制访问其他非私有财产)。

所以我更倾向于将默认视为一致的 - 即在概念上是私有的,关键字是不一致的 - internal有时意味着保持本地上下文,有时意味着授予对整个程序集的访问权限: - )。并且private几乎总是没有任何意义 - 它是纯粹的样板文件,因此最好省略(除了属性访问器)。