zoukankan
html css js c++ java
(转)C#中protected用法详解
(转自
http://blog.csdn.net/lijinlin/article/details/5954688
)
在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);
}
}
查看全文
相关阅读:
优化代码及其他注意事项---好好做人吧
el-table里面的列需要对比两个返回参数
怎么样使element ui 的table某列变色
怎么在app上添加图标和文字
app内嵌H5的上传图片的功能
将本地的链接在手机上查看
《概率统计》2.离散型随机变量:分布与数字特征
《概率统计》1.理论基石:条件概率、独立性与贝叶斯
pygame(1):基本使用(更新中~~~)
详解DataFrame、Series的replace方法
原文地址:https://www.cnblogs.com/wangyt223/p/2627801.html
最新文章
js 为对象添加和删除属性
vue实现复制功能(项目使用)
Scala 继承关系
scala学习 组合与继承
leetcode刷题笔记二十 有效的括号 Scala版本
leetcode刷题笔记十九 删除链表的倒数第N个节点 Scala版本
mybatis 搭建环境
mybatis 基础
maven 实现servlet工程
maven 添加国内镜像源
热门文章
mave创建项目
Idea 集成maven
Maven 常用命令
Maven 标准目录结构
模块
面向过程与函数式编程
赋值清空的简写
beforeDestroy的使用
element ui input 输入时触发事件
element ui里面table分页,页数从0开始的怎么做?
Copyright © 2011-2022 走看看