大学期间我一直在使用public,想知道public, private和protected之间的区别吗?
还有,相对于什么都没有,静态有什么作用呢?
大学期间我一直在使用public,想知道public, private和protected之间的区别吗?
还有,相对于什么都没有,静态有什么作用呢?
当前回答
c#中所有访问修饰符的描述
其他回答
这些访问修饰符指定成员可见的位置。你应该读读这个。以IainMH给出的链接为起点。
静态成员是每个类一个,而不是每个实例一个。
小心!注意类的可访问性。默认情况下,所有人都可以访问公共和受保护的类和方法。
此外,微软在显示访问修饰符(公共的,受保护的,等等。关键字)当Visual Studio中创建新类时。因此,请仔细考虑类的可访问性,因为它是通往实现内部的大门。
重新发布这个答案的精彩图表。
以下是维恩图中的所有访问修饰语,从更有限制的到更混杂的: 私人: private protected: c# 7.2新增 内部: 保护: 保护内部: 公众:
Public -如果你能看到类,那么你也能看到方法
Private -如果你是类的一部分,那么你可以看到这个方法,否则就不能。
Protected -与Private相同,加上所有后代也可以看到该方法。
静态(类)——还记得“类”和“对象”之间的区别吗?忘掉这些吧。“static”也是如此。类是自身的唯一实例。
静态(方法)——无论何时使用这个方法,它都有一个独立于它所属类的实际实例的参考框架。
图形概述(简要总结)
实际上,情况要比这复杂一些。 现在(从c# 7.2开始),也有private protected,派生类是否在同一个程序集中也很重要。
因此,需要扩展概述:
请参阅有关此主题的c# -dotnet-docs。
因为静态类是密封的,所以它们不能被继承(除非是从Object继承),所以关键字protected在静态类上是无效的。
对于默认情况,如果你在前面不放访问修饰符,请参见这里: c#类和成员(字段,方法等)的默认可见性?
Non-nested
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
此外,还有seal -关键字,它使类不可继承。 同样,在VB中。NET,关键字有时是不同的,所以这里有一个小抄: