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);

                }

            }


  • 相关阅读:
    高盛、沃尔玛 题做出来还挂了的吐槽
    amazon师兄debrief
    到所有人家距离之和最短的中点 296. Best Meeting Point
    问问题没人回答的情况怎么办终于有解了
    找名人 277. Find the Celebrity
    数组生存游戏 289. Game of Life
    547. Number of Provinces 省份数量
    428. Serialize and Deserialize Nary Tree 序列化、反序列化n叉树
    alias别名简介和使用
    面试官:线程池执行过程中遇到异常会发生什么,怎样处理? Vincent
  • 原文地址:https://www.cnblogs.com/wangyt223/p/2627801.html
Copyright © 2011-2022 走看看