Warm tip: This article is reproduced from serverfault.com, please click

.net-在C#中,公共,私有,受保护和没有访问修饰符之间有什么区别?

(.net - In C#, what is the difference between public, private, protected, and having no access modifier?)

发布于 2009-03-05 13:48:38

我所有的大学四年我一直在使用public,并想知道的区别publicprivateprotected

还有什么static而不是什么都不做呢?

Questioner
MrM
Viewed
0
2020-06-20 17:12:55

访问修饰符

来自docs.microsoft.com

public

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

private

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

protected

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

private protected (在C#7.2中添加)

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

internal

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

protected internal

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

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

static 修饰符

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

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

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

static class Foo()
{
    static Foo()
    {
        Bar = "fubar";
    }
    
    public static string Bar { get; set; }
}

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

MyStaticClass.ServiceMethod(...);