C#中protected用法詳解

來源:互聯網
上載者:User

標籤:天下   使用   weight   答案   static   com   不同的   無法   .com   

轉自(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);

            }

        }

C#中protected用法詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.