《CLR via C#》精髓:类型可见性和成员可访问性

一、类型的可见性

类型(不包括嵌套类型)的可见性分为 public 和 internal。

  • public:类型对任何程序集可见;
  • internal:类型仅对定义程序集可见。

类型的默认可见性为 internal。

二、成员的可访问性

类型(包括嵌套类型)成员的可访问性包括:private、protected、internal、protected internal 和 public。访问修饰符间的区别如下表所示。

CLR术语 C#术语 程序集内 程序集外 描述
定义类型 嵌套类型 派生类型 派生类型 非派生类型
Private private  private private       成员只能由定义类型或任何嵌套类型中的方法访问
Family and Assembly (不支持) internal internal protected     成员只能由定义类型、任何嵌套类型或者同一程序集中定义的任何派生类型中的方法访问
Family protected internal internal protected protected   成员只能由定义类型、任何嵌套类型或者不管在什么程序集中的一个派生类型中的方法访问
Assembly internal internal internal internal     成员只能由定义程序集中的方法访问
Family or Assembly protected internal internal internal internal protected   成员可由任何嵌套类型、任何派生类型(不管在什么程序集)或者定义程序集中的任何方法访问
Public public public public public public public 成员可由任何程序集的任何方法访问

成员的默认可访问性为 private。C#规定:派生类重写基类型中定义的成员时,原始成员与重写成员应具有相同的可访问性。不过,CLR允许放宽(但不允许收紧)从基类派生成员的可访问性。

《CLR via C#》精髓:类型可见性和成员可访问性

上一篇:python logging


下一篇:java中paint,repaint,update之间的关系(闪烁问题的解决)