【原创】关于C#访问修饰符protected internal的说明



关于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访问修饰符是限制能在本程序集中完全访问,还有在其它程序集中继承访问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值