C#中public,private,protected,internal都有什么区别?

参考资料:
https://www.cnblogs.com/net-sky/p/10345566.html
《C# 7 核心编程》

因为一直区分不清什么时候该用什么访问控制修饰符,在这里稍微把这两天从网上查到的资料总结一下。

  1. default(默认的访问修饰符):

    • 方法的默认访问修饰符为 private
    • 类 class 的默认访问修饰符为 internal,构造函数默认为 public,析构函数不能显示使用访问修饰符且默认为 private 访问修饰符,类的成员默认为private
    • 接口 interface 的成员默认访问修饰符为 public,且不能显式使用访问修饰符
    • 枚举 enum 类型成员默认为 public,且不能显式使用访问修饰符
    • 结构体 struct 成员默认private,且不能用protected修饰,因为 struct 没有“继承”特性
    • 嵌套类型默认 private,与 class、struct 的成员的默认访问类型一致
    • 命名空间下的元素的默认访问修饰符:
      • public: 同一程序集的其他任何代码或引用该程序集的其他程序集都可以访问该类型或成员(类内、程序集内、程序集外、子类中等)
      • internal: 同一程序集中的任何代码都可以访问该类型或成员,但其他程序集不可以访问。(类内、程序集内、子类中)
  2. 剩下的修饰符主要针对“继承”特性,class 与 interface 均有该特性:

    • private: 同一类和结构的代码可以访问该类型和成员,即只能在类内访问,完全私有
    • protected: 同一类和派生(继承特性)类中的代码可以访问该类型和成员,受保护
    • protected internal: 同一程序集中的任何代码或其他程序集中的任何派生类都可以访问该类型或成员,这两个修饰符组合使用很容易误导人。该访问修饰符允许在本类,派生类或者包含该类的程序集中访问,这也被用于实现继承
  3. internal 与 protected internal 区别:internal 修饰的成员在其他程序集中的派生类中无法访问

  4. 类特有的访问控制修饰符:

    • sealed:不能被继承的类
    • partial:可以声明在不同文件中的同一个类
posted @ 2021-05-24 22:12  Kit_L  阅读(1170)  评论(0编辑  收藏  举报