2017-07-09 77 views
-1

我是新的C#和我有一個很奇怪的問題,下面是源代碼:受保護的成員在其自己的類實例中不可訪問?

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     class B 
     { 
      protected int number = 11; 
     } 

     class A : B 
     { 

     } 

     static void Main(string[] args) 
     { 
      A a = new A(); 
      int testA = a.number; //error inaccessable due to its protection level 

      B b = new B(); 
      int testB = b.number; //error inaccessable due to its protection level 
     } 
    } 
} 

我不明白爲什麼派生類實例的不能訪問到父母的受保護的領域,最奇怪的?部分是實例b如何不能訪問自己的領域?

回答

1

我不明白爲什麼派生類實例a不能訪問父母的受保護字段? 並且最奇怪的部分是實例b如何不能訪問自己的字段?

B有權訪問其自己的字段,您正嘗試在Program的Main()方法中訪問A & B以外的受保護字段。

閱讀關於c#訪問說明here

受保護的關鍵字只允許在類和從它繼承的類中訪問。如果您要訪問的類層次結構之外的財產,你必須使用「公共」或「內部」(在同一組件內訪問)

class Program 
{ 
    class B 
    { 
     private int privateNumber = 1; 

     protected int protectedNumber = 11; 

     public int publicNumber = 1; 

     public B() 
     { 
      privateNumber = 1; // Valid! - private to class B 
     } 
    } 

    class A : B 
    { 
     public A() 
     { 
      this.privateNumber = 2; // Invalid - private to class B and not accessible in derived class! 
      this.protectedNumber = 3; // Valid 
     } 
    } 

    static void Main(string[] args) 
    { 
     A a = new A(); 
     int testA = a.protetedNumber; // Invalid 
     testA = a.publicNumber; // Valid since the field is public 
    } 
} 
相關問題