C#中的private protected internal以及public的区别

C#中的private protected internal以及public的区别

访问权限区别

private:只能在本类中使用
protected:在本类中及其子类中可以使用
internal:同一命名空间(程序集)中的类可以使用
public:所有类均可使用
从上到下,私有程度逐渐降低

protected的用法

    protected访问修饰符在大多数资料中的定义:访问仅限于包含类或从包含类派生的类型。要搞明白这个定义只靠眼看是不行的,需要实践,现在我们用事实来说明问题,代码如下:

    class BaseTest
    {
        public int a = 10;
        protected int b = 2;
    }

    class ChildTest:BaseTest
    {
        int c;
        int d;
        
        public void printTest()
        {
            BaseTest basetest = new BaseTest();
            this.a=basetest.a;
            this.c = basetest.b;
        }
     }

    这段代码中派生类中的方法的最后一行代码会报错:无法通过类型“protectedtest.Vehicle”的限定符访问保护成“protectedtest.Vehicle.weight”;限定符必须是类型“protectedtest.Car”(或者从该类型派生)。
    看到这里就会有很多人要问了,不是说protected类型的访问仅限于包含类或者从包含类派生的类型吗,为什么这里还是要报错呢,下面就来说明一下,包含类能够使用protected类型的应该是没有任何问题的,这里就不用那个说了,主要问题就是集中在为什么在上面的那个例子中基类的实例为什么不能够访问protected类型的变量,这里就涉及到对protected类型的理解:
    protected类型并不是能够被派生类所访问就是随心所欲的访问,而是有条件的,访问必须是通过派生类类型发生时,在派生类中的基类的protected类型成员才能够被访问,这里就很清楚了上面的代码并不是通过派生类的类型访问的,而是通过基类的类型访问的,此时此刻,protected和private十分的相似,只不过,protected类型成员能够被派生类所继承并且能够通过派生类类型访问罢了。
    改成如下形式就正确了,不过大家不过拘泥于这两个代码的形式,要看透到底是说明了个什么问题:

        class BaseTest
        {
            public int a = 10;
            protected int b = 2;
        }
        
        class ChildTest : BaseTest
        {
            int c;
            int d;
            
            static void Main(string[] args)
            {
                BaseTest basetest = new BaseTest();
                ChildTest childTest = new ChildTest();
                Console.WriteLine(childTest.b);
            }
        }

参考链接

C#用代码private protected public internal的区别
C#中protected用法详解

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值