2009-08-11 133 views
2

這是我目前的佈局:(問題是註釋)訪問成員(繼承)

class A 
{ 
    int foo; 
} 

class B : A {} 

class C : B 
{ 
    void bar() 
    { 
     //I want to access foo 
     base.foo; // Doesn't work 
     base.base.foo // Doesn't work, of course 
    } 
} 

正如你看到的,我不能在C.使用base如何可以訪問的A成員我訪問它?謝謝:)

回答

6

如果您foo的保護,

class A 
{ 
    protected int foo; 
} 

那麼一個簡單的基地會做:

void bar() 
    { 
     //I want to access foo 
     base.foo; // will work now 
     // base.base.foo // Doesn't work, of course 
    } 

但它會更好地建立一個圍繞一個foo的(保護)特性:

class A 
    { 
     private int _foo; 
     protected int Foo 
     { 
      get { return _foo; } 
      set { _foo = value; } 
     } 
    } 
+0

非常感謝,我簡直忘了。 :)對不起,提出如此基本的問題,它已經很長時間,因爲我上次用C#編碼。 – Lazlo 2009-08-11 20:58:23

+2

@Lazlo - 你不應該道歉,這是這個網站的用途。 – 2009-08-11 21:00:04

2

在int foo前公開;

class A 
{ 
    public int foo; 
} 

class B : A {} 

class C : B 
{ 
    void bar() 
    { 
     //I want to access foo 
     base.foo; // Now you can see it 
    } 
} 

默認情況下,除非您指定,否則所有成員都是私有的。

3

A中的字段被聲明爲私有。應該保護派生類訪問它。