2012-09-13 48 views
2

我在嘗試幾件事,想知道爲什麼會發生這種情況。受保護的班級內部工作但不在外面工作

說,我有一個命名空間ň稱爲A類,我試圖創建受保護的內部類B.

namespace n 
{ 
    public class A 
    { 
     public A() 
     { 
     } 
    } 
    protected internal class B //throwing error 
    { 
    } 
} 

但是當我嘗試這樣的(B作爲子類A),其不會拋出錯誤和成功。你能解釋一下爲什麼是這樣嗎?

namespace n 
{ 
    public class A 
    { 
     public A() 
     { 
     } 
     protected internal class B // its not throwing error 
     { 
     } 
    }  
} 

我理論上缺少什麼嗎?它相當混亂。

回答

2

看看錯誤。在一個命名空間中定義

元素不能被顯式聲明爲 私人,保護,或受保護的內部

只有內部或公共成員被允許類外。

你的第二種情況是將B類定義爲類A的成員,這就是爲什麼你沒有得到錯誤。

您可能會看到Access Modifiers C#

類和結構被聲明直接一個命名空間內(在其他 的話,那不是嵌套在其他類或結構內)可以 是公共或內部。如果未指定訪問 修飾符,則內部是默認值。

+0

謝謝habib。其合理性 – VIRA

+0

除了internal(默認修飾符)和public外,密封也可以用作類的修飾符。 –

2

除非班級在另一班級內,否則班級不能爲protected

protected關鍵字僅適用於類別的成員。在你的第二個例子中,class B碰巧就是那個成員。

想一想:
protected意思是:派生類可以訪問這個成員。
由於沒有派生名稱空間這樣的概念,因此protected關鍵字對於名稱空間的成員沒有意義。

1

保護聲明爲派生類型的可見性水平。

在您的第一個案例中,您聲明namespace中的類。沒有名稱空間的任何polymophic支持,所以沒有在namespace

在第二種情況下使用受保護的種類的任何培訓就業處,而是使用它的其他CLASSE(類A),這使得它爲所有的孩子看到裏面A類。

0

任何東西不是封閉類型(類)的成員根本沒有意義的是protected受保護成員僅用於訪問從包含該成員的已定義類型派生的成員,並且在第一個示例中您缺少該類型定義。

相關問題