runxinzhi.com
首页
百度搜索
(转)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);
}
}
相关阅读:
用 jQuery Masonry 插件创建瀑布流式的页面
ecshop标签大全 各个页面常用标签大全
Logistic Regression Using Gradient Descent -- Binary Classification 代码实现
Linear Regression Using Least Squares Method 代码实现
eigen quick reference
Linear Regression Using Gradient Descent 代码实现
eigen 笔记2
eigen 笔记1
Floyd 判圈算法
SQL Expression Language Tutorial 学习笔记二
原文地址:https://www.cnblogs.com/wangyt223/p/2627801.html
最新文章
PHP大数组,大文件的处理
套接字半关闭与关闭
ab工具测试 swoole 和 ngixn+php-fpm 的并发对比
搭建mysql主从复制和删库数据恢复策略
Keepalived 配置高可用
嗨翻C语言笔记(一)
在win2008中配置ServU
Serv-U软件在64位操作系统下使用不了odbc解决方法
关于博客园与CSDN博客同步的说明
ASSERT报错:error C2664: “AfxAssertFailedLine”: 不能将参数 1 从“TCHAR []”转换为“LPCSTR”
热门文章
c++ 11 国标标准方面的异常处理与微软在Visual Studio 2012的异常处理的区别
error LNK2005: DDX_Control 已经在 uafxcwd.lib(wincore2.obj) 中定义
Win32非递归遍历和搜索文件以及目录算法
VS2012生成不依赖运行时不依赖MFC的MFC程序
我的一点关于把WndProc指向类的成员函数的看法
图响应式前端框架版响应式后台正式发布
手机web——自适应网页设计(html/css控制)
CSS+DIV标签命名规范 搜索引擎最喜欢
响应式web设计之CSS3 Media Queries
100% width CSS 在 iPad / iPhone Safari 背景被截断 / 显示不全
Copyright © 2020-2023
润新知