2011-03-28 111 views
0

我似乎不明白保護的訪問修飾符保護關鍵字

從閱讀的MSDN,看來我可以聲明在A級受保護

具有B級繼承類A,然後訪問屬性財產。

我的問題是,當我實例B類我不能訪問類受保護的方法。僞代碼如下

class a 
{ 
protected int steve {get;set} 
} 
class b:a 
{} 

console app 
private foo = new class b(); 
foo.steve = 3; 

我明白這個代碼將無法編譯,我找上我爲什麼不能從B的實例化版本的Access史蒂夫理論非常感謝您的幫助。

回答

4

protected成員可以訪問內部派生類,但對於其他人,它像private。 這意味着:
可以在ab或任何其它派生類型的成員訪問steve。但您無法從外部訪問steve

+0

之所以選擇這個問題的答案,因爲它說明了保護的關鍵字是如何工作的,並告訴我,爲什麼我不能用它我想的方式。感謝大家花時間閱讀我的問題和答案 – gh9 2011-03-28 18:30:25

4

您是從B類之外訪問它。這會工作,因爲它是從b類內部訪問的。

class a 
{ 
protected int steve {get;set} 
} 

class b:a 
{ 
public void foo() { 
    steve = 4; 
} 
} 
2

Protected是在聲明的方法中,可變的類等可以使用它類似於私有的,但它暴露在子類中使用,以及該方法或可變的。

1

「B」,可以看到「一個」,因爲「B」是「A」,但是試圖調用「B」,你看不到「」受保護的成員時的保護成員。您可以通過「史蒂夫」公開,然後改變「獲取」,並在屬性不同的結果「集」的修飾詞和這個實驗。即您只能將屬性設置爲「b」,但可以從任何地方獲取。

1

protected改性劑允許派生類在其聲明的範圍內訪問構件。對於外界protected是沒有什麼不同private

class a { 
    protected int steve {get;set} 
} 
class b : a { 
    void Example() { 
    steve = 42; // legal. Access protected within the declaration 
    } 
} 

class Program { 
    public static void Main() { 
    b local = new b(); 
    local.steve = 13; // Error! Outside b`s declaration steve is effectively private 
    } 
}