博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(转)C#中protected用法详解
阅读量:7259 次
发布时间:2019-06-29

本文共 1276 字,大约阅读时间需要 4 分钟。

(转自)
        
 
在c#的可访问性级别中,public和private算是最容易理解的,相反protected往往令人非常头疼。经常在网上查资料的朋友往往会发现,
答案几乎都是前篇一律,不是从msdn上拷贝的就是从别人的博客上抄袭的,简直是天下文章一大抄,今天咱们就来点和别人不同的,通过例子来透析一下
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);
            }
        }

转载地址:http://tlodm.baihongyu.com/

你可能感兴趣的文章
Cocos2d-x3.0游戏实例之《别救我》第八篇——TiledMap实现关卡编辑器
查看>>
Java Socket网络编程常见异常(转)
查看>>
深度学习课程笔记(十六)Recursive Neural Network
查看>>
【转】fatal error C1189: #error : missing -D__STDC_CONSTANT_MACROS / #define __STDC_CONSTANT_MACROS...
查看>>
Linux eval命令
查看>>
C++ extern c 用法
查看>>
VC中字符串由于版本不同而导致的错误问题
查看>>
分布式缓存技术redis学习(一)——redis简介以及linux上的安装
查看>>
为什么kafka使用磁盘而不是内存
查看>>
创立一个站点的前前后后(起因,域名,云平台,备案,CDN等等)(1)
查看>>
天朝git的使用
查看>>
什么是 HTTPS
查看>>
BPF and eBPF linux
查看>>
如何解决MySQL在高版本需要指明是否进行SSL连接问题
查看>>
[PAL算法说明]SAP HANA PAL线性回归预测分析Linear Regression算法说明LRREGRESSION
查看>>
JAVA学习课第二十八届(多线程(七))- 停止-threaded多-threaded面试题
查看>>
Android仿微信图片上传,可以选择多张图片,缩放预览,拍照上传等
查看>>
我的vim配置
查看>>
C#获取微信二维码显示到wpf
查看>>
时间戳和字符串之间的互相转换
查看>>