在什么情况下,一个类不受可访问性级别的影响?

Xav*_*ppé 1 c# oop visual-studio

这里很直接.我想知道什么时候c#(可能还有任何oo语言)的课程都没有"公开","私密","受保护"......

我问这个问题,因为当我在Visual Studio中创建一个类时,它会生成一个没有可访问性修饰符的类存根,如下所示:

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

namespace myNamespace
{
    class myClass
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

每次我不太注意这部分代码并在其他地方引用它,最后运行并得到一个不一致的可访问性错误.

那么在什么情况下,一个班级可以,也许应该只是"阶级"而不是公开或任何形式?我很难找到一个好东西的地方.

是否有默认的辅助功能修改器?

Jon*_*eet 5

C#中的一般规则是"默认为私有,因为您可以明确声明它".所以:

namespace Foo
{
    class Bar  // Implicitly internal class Bar
    {
        int x; // Implicitly private int x

        void Baz() {} // Implicitly private void Baz() {}

        class Nested // Implicitly private class Nested
        {
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

...您不能将顶级(非嵌套)类声明为private,但您可以将嵌套类声明为私有.

此规则被破坏的唯一情况是使用属性,其中getter或setter的默认值"与整体属性声明相同",并且您只能在getter/setter上指定严格的修饰符.例如:

internal string Foo { get; private set; }
Run Code Online (Sandbox Code Playgroud)

有内部吸气剂.但是整体属性遵循第一条规则 - 因此它默认为私有.