C#学习笔记 -- 成员访问修饰符

成员访问修饰符

  • 所有显式声明在类声明中的成员都是互相可见的, 无论给他们声明访问等级

  • 继承的成员不在类声明中显式声明, 所以, 继承成员对派生类的成员是可见的, 也可以是不可见的, 基类私有派生类看不见

  • 访问级别

    • public

    • private

    • protected

    • internal

    • protected internal

  • 必须对每个成员指定成员访问等级, 不指定默认为private

  • 成员的可访问性不能高于他所在的类

(0)访问成员的区域

类MyClass被声明为public, 他的成员的可见性依赖于各个成员的修饰符

public class MyClass
{
    public int Member1;
    private int Member2;
    protected int Member3;
    internal int Member4;
    protected internal int Member5;
}

另一个类能否访问MyClass成员取决于该类的两个特征

  • 是否派生自MyClass

  • 是否与MyClass类在同一个程序集

两个特征征化分出4个集合

  • 在同一程序集且继承自MyClass(右下)

  • 在同一程序集但不继承MyClass(左下)

  • 在不同的程序集且继承MyClass(右上)

  • 在不同的程序集且不继承MyClass(左上)

(1)public公有成员

Y / N 不能继承MyClass的类 继承MyClass的类
所有其他程序集中的类 Y Y
相同程序集中的类 Y Y

(2)private私有成员

  • 只能被他自己的类成员访问

  • private成员可以被嵌套在他内部的类成员访问

Y / N 不能继承MyClass的类 继承MyClass的类
所有其他程序集中的类 N N
相同程序集中的类 N N

(3)protected受保护的成员

  • 他自己的类成员

  • 任何程序集中, 他的派生类成员

  • 嵌套在他内部的类

Y / N 不能继承MyClass的类 继承MyClass的类
所有其他程序集中的类 N Y
相同程序集中的类 N Y

(4)internal内部成员

  • 所在同一程序集内部所有类, 包括所在同一程序集的派生类

Y / N 不能继承MyClass的类 继承MyClass的类
所有其他程序集中的类 N N
相同程序集中的类 Y Y

(5)protected internal受保护的内部成员

  • 所在同一程序集内部所有类, 包括所在同一程序集的派生类

  • 不在同一程序集的派生类

Y / N 不能继承MyClass的类 继承MyClass的类
所有其他程序集中的类 N Y
相同程序集中的类 Y Y

(6)小结

修饰符 含义
private 只在类的内部可访问
internal 对该程序集内所有类可访问
protected 对其所有派生类可访问
protected internal 对其所有派生类或在该程序集内部所有类
public 对任何类可访问

posted on 2023-05-22 19:30  老菜农  阅读(25)  评论(0编辑  收藏  举报

导航