2016-08-26 70 views
0

我明白,如果我使用私人訪問修飾符,例如:C#中私人和公共訪問修飾符之間的區別?

namepsace MyNameSpace 
{ 
    class Book 
    { 
    private string title; 
    } 
} 

那麼這意味着該實例變量標題就只能是從類即中訪問上例中的類。

但是,如果我將實例變量設置爲public,我已經讀過,這使得它可以在課程外部訪問。

我的問題是,這是否也意味着它可以在命名空間之外訪問?或者我們還在討論名稱空間內的類?我找不到任何回答我這個問題的資源,因此想到這裏問。

+2

標記此與您正在使用,以獲得相關的人來看待它的語言。 –

+3

這似乎是[訪問修飾符](https://msdn.microsoft.com/en-us/library/wxh6fsc7.aspx)引用將解釋你想知道的。當您對語言/框架有疑問時,請始終檢查文檔。 – mason

回答

0

title的完整位置是MyNameSpace::Book::titleNamespaces不限制其成員的可訪問性。 Namespace爲其成員提供新位置。 class也是Namespace的一種類型。

例如:

在中國則可能是數123456789電話。在新加坡也可能有一個電話號碼相同的號碼123456789。任何人都可以撥打這些號碼。但要區分這些不同的數字,我們需要Country Code,有時也需要STD Code。所以在這裏,Country CodeSTD CodeNamespace

使classpublic的成員不會影響它在Namespace之外可以訪問。但是,成員訪問應該通過類的對象有效。

+0

這個例子並沒有讓我覺得更清晰。 – Michel

0

不,這不是關於命名空間。名稱空間是一個位置。只要你的班級被訪問,它的公共成員也可以被訪問。

1

命名空間純粹是爲了組織,而不是爲了可訪問性。 .NET中沒有可訪問機制允許/限制基於名稱空間的資源訪問。由於命名空間可以分佈在多個程序集中,因此將一個成員私有化爲「命名空間」將不會有效,因爲任何人都可以在不同的程序集中編寫類,但使用相同的命名空間並訪問這些成員。

您可以從the documentation推斷出這一點,當討論可訪問性時,只提及類型和程序集,不提及名稱空間。

一般來說,private的意思是「只能用於含有的東西的定義」。對於會員,這是班級;對於類型,它是定義它的「外部」類型,如果有的話。您不能擁有頂級private類型,因爲名稱空間並非真正的「容器」,所以沒有任何東西可以使其成爲私有的

,解決這個其他問題:

Namespace only class visibility in C#/.NET?

private classes inside namespaces

How do you make infrastructure code only visible in namespace?

相關問題