大学期间我一直在使用public,想知道public, private和protected之间的区别吗?

还有,相对于什么都没有,静态有什么作用呢?


当前回答

我认为这与好的面向对象设计有关。如果您是库的开发人员,则希望隐藏库的内部工作方式。这样,以后就可以修改库的内部工作方式。所以你把你的成员和辅助方法设为私有,只有接口方法是公共的。应该被覆盖的方法应该受到保护。

其他回答

这些访问修饰符指定成员可见的位置。你应该读读这个。以IainMH给出的链接为起点。

静态成员是每个类一个,而不是每个实例一个。

当前访问修饰符的另一种可视化方法(c# 7.2)。希望这个模式能帮助你更容易地记住它 (请按此图片浏览。)

外内

如果你很难记住两个词的访问修饰符,记住由外而内。

Private protected:外部私有(相同程序集)内部受保护(相同程序集) 保内:保外(同一组件)保内(同一组件)

嗯…

静态意味着您可以在没有类实例的情况下访问该函数。

您可以直接从类定义中访问。

图形概述(简要总结)

实际上,情况要比这复杂一些。 现在(从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,关键字有时是不同的,所以这里有一个小抄:

Hmm.

参见这里:访问修饰符。

简而言之:

Public使方法或类型从其他类型/类中完全可见。

Private只允许包含私有方法/变量的类型访问私有方法/变量(注意,嵌套类也可以访问包含类的私有方法/变量)。

Protected与private类似,只是派生类也可以访问Protected方法。

“Nothing”是VB。NET等价于null。虽然如果你提到的“nothing”意味着“没有访问修饰符”,那么这要视情况而定,尽管一个非常粗略的经验法则(当然在c#中)是,如果你没有显式地指定访问修饰符,方法/变量声明通常会受到尽可能多的限制。 即。

public class MyClass
{
    string s = "";
}

实际上等同于:

public class MyClass
{
    private string s = "";
}

当没有显式指定访问修饰符时,链接的MSDN文章将提供完整的描述。