关于C#访问修饰符protected internal的说明
C#中有5中访问修饰符,分为是public、protected、private、internal和protected internal。
这5种访问修饰符都可以对类的成员的访问级别进行限制。
但只有public和internal这两个可以限制类的访问级别。
public:类和类的对象都可以访问
protected:类和子类可以访问,值得一提的是在C#中,类的继承具有传递性,也就是说不止子类可以访问父类中的protected成员,子类的子类也可以。。。
private:只有类内部可以访问
internal:只在相同的程序集中可以访问
还有一种就是protected internal,从字面上理解,是只有相同的程序集中类和子类可以访问。
但是不是这样呢?我们不妨来验证一下。
我们新建两个项目A和B,在A中添加类ClassA。
public class ClassA
{
protected string _name;
protected internal int _age;
}
在B中添加类ClassB。
class ClassB : A.ClassA
{
public void Print()
{
Console.WriteLine(_name);
Console.WriteLine(_age);
}
}
发现程序竟然可以成功编译、运行。如果按照我们前面对protected internal的理解,程序应该编译不通过才对。
我们在A项目中添加ClassC类。
class ClassC
{
ClassA a = new ClassA();
private void Print()
{
Console.WriteLine(a._age);
}
}
发现可以成功编译、运行。
其实protected internal访问修饰符是限制能在本程序集中完全访问,还有在其它程序集中继承访问。