小编典典

在 C# 中,public、private、protected 和没有访问修饰符有什么区别?

all

我一直在使用的所有大学时期public,并且想知道 , 和 之间publicprivate区别protected

还有什么static做而不是一无所有?


阅读 164

收藏
2022-03-02

共1个答案

小编典典

访问修饰符

来自docs.microsoft.com

public

类型或成员可以由同一程序集或引用它的另一个程序集中的任何其他代码访问。

private

类型或成员只能由同一类或结构中的代码访问。

protected

类型或成员只能由同一类或结构中的代码或派生类中的代码访问。

private protected (在 C# 7.2
中添加)

类型或成员只能由同一类或结构中的代码或同一程序集的派生类中的代码访问,但不能从另一个程序集中访问。

internal

类型或成员可以由同一程序集中的任何代码访问,但不能从另一个程序集中访问。

protected internal

同一程序集中的任何代码或另一个程序集中的任何派生类都可以访问该类型或成员。

如果 设置访问修饰符,则使用默认访问修饰符。因此,即使没有设置,也总会有某种形式的访问修饰符。

[static修饰符](https://docs.microsoft.com/en-us/dotnet/csharp/language-

reference/keywords/static)

类上的 static 修饰符意味着该类不能被实例化,并且它的所有成员都是静态的。无论创建了多少个其封闭类型的实例,静态成员都有一个版本。

静态类与非静态类基本相同,但有一个区别:静态类不能被外部实例化。换句话说,您不能使用 new
关键字来创建类类型的变量。因为没有实例变量,所以您可以使用类名本身来访问静态类的成员。

但是,有一个静态构造函数。任何类都可以有其中之一,包括静态类。它们不能直接调用并且不能有参数(除了类本身的任何类型参数)。在创建第一个实例或引用任何静态成员之前,会自动调用静态构造函数来初始化类。看起来像这样:

static class Foo()
{
    static Foo()
    {
        Bar = "fubar";
    }

    public static string Bar { get; set; }
}

静态类通常用作服务,您可以像这样使用它们:

MyStaticClass.ServiceMethod(...);
2022-03-02