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);
}
}
查看全文
相关阅读:
ORACLE 11g RAC-RAC DG Duplicate 搭建(生产操作文档)
1.kafka是什么
11.扩展知识-redis持久化
10.Redis-服务器命令
9.扩展知识-redis批量操作-事务(了解)
8.扩展知识-多数据库(了解)
7.Redis扩展知识-消息订阅与发布(了解)
K8S上部署ES集群报错
ORM 常用字段和参数
celery的使用
原文地址:https://www.cnblogs.com/wangyt223/p/2627801.html
最新文章
jq dom 操作
如何用css实现现代布局
vue js 混入
jQuery 选择器
HTML与CSS如何创建悬停折角纸叠效果
206
206
205
205
204
热门文章
203
202
201
200
199
单页与多页面,网站的区别
Oracle 数据库查看client的用户登录信息包括ip
How to quickly check installed software versions
shell bash判断文件或文件夹是否存
Finding the source of failed login attempts. (Doc ID 352389.1)
Copyright © 2011-2022 走看看