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

26 浏览
0 Comments

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

在我上大学的所有年份里,我一直在使用public,想知道publicprivateprotected之间的区别?

另外,相对于没有任何内容,static的作用是什么?

admin 更改状态以发布 2023年5月21日
0
0 Comments

一个图形概述(简要总结)

Visibility

实际上,情况比这复杂一些。
现在(自 C# 7.2 开始),还有私有受保护(private protected),并且派生类是否在相同的程序集中很重要。

因此,概述需要扩展:

Visibility expanded

还可以参见有关主题的 C# .NET 文档

由于静态类是密封的,它们不能被继承(除了 Object),因此在静态类上使用 protected 关键字是无效的。

如果您没有在前面放置访问修饰符,则默认情况如下,请参见此处:
C# 类和成员(字段、方法等)的默认可见性?

非嵌套

enum                              public
non-nested classes / structs      internal
interfaces                        internal
delegates in namespace            internal
class/struct member(s)            private
delegates nested in class/struct  private

嵌套:

nested enum      public
nested interface public
nested class     private
nested struct    private

此外,还有一个 sealed 关键字,使一个类不能被继承。
另外,在 VB.NET 中,关键字有时是不同的,因此这里有一个速查表:

VB vs. CS equivalents

0
0 Comments

访问修饰符

来自learn.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(...);

0