类是 .net 中的专用或内部默认值

本文关键字:内部 默认值 专用 net 类是 | 更新日期: 2023-09-27 17:57:01

可能的重复项:
为什么Visual Studio默认不创建公共类?

MSDN 链接告诉我们

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

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

请解释默认情况下它是内部还是私人?

类是 .net 中的专用或内部默认值

所有成员的默认值为"您可以指定的最私密"1

因此,默认情况下private嵌套类型,但默认情况下internal顶级类型:

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

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


1 除了特定的属性获取者/资源库之外,当您使属性更加私密时,您只能明确说明属性的一部分。

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

在你提到的文章中,很明显,如果类在另一个类内,则默认情况下访问将是私有的。访问级别可以更改

无法将顶级类创建为私有类

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

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

未嵌套在其他类型的顶级类型中只能具有 内部或公共可访问性。这些的默认可访问性 类型是内部的,引用。

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

默认情况下

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

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

这是我们的测试对象:

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()
    {
    }
}

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