【转】C#中protected用法详解

【转】C#中protected用法详解 

 

https://www.cnblogs.com/wangyt223/archive/2012/08/08/2627801.html

在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);
        }
  }
复制代码
复制代码

posted on   漫思  阅读(108)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
历史上的今天:
2022-11-12 中国航天科工二院七〇六所加入 openKylin 社区!
2022-11-12 openKylin
2022-11-12 C# 11 正式发布
2022-11-12 抽烟腿软怎么回事
2021-11-12 BaaS
2021-11-12 几款主流好用的富文本编辑器(所见即所得常用编辑器)介绍
2021-11-12 【解决】Uncaught SyntaxError: Unexpected end of JSON input at JSON.parse

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示