2017-03-01 60 views
0

我讀了幾個主題,Google搜索了很多網站,閱讀了一些關於「內部」訪問修飾符的定義。但仍然令人困惑。我找不到裝配的確切定義。.Net程序集和內部訪問修飾符的使用

讓我們在Visual Studio中假設我有解決方案,其中我有兩個項目 -

ProjectA (NameSpaceA), ProjectB (NameSpaceB). 
ProjectA has references of ProjectB. 

Each project has 2 class (.cs) files 
- ProjectA (ClassA1.cs, ClassA2.cs) 
- ProjectB (ClassB1.cs, ClassB2.cs) 

在ClassA1.cs文件我有兩個類:A1ClassOne,A1ClassTwo。在所有其他.cs文件中,每個文件只有一個類。

在解決方案每個類是單獨的類(沒有派生類)

問題:如果A1ClassOne我有法訪問修飾符「內部」,然後從該班將可以訪問? 以上解決方案示例中的組件含義是什麼?整體解決方案或者每個項目都是不同的組件(解決方案中有兩個組件)?或者每個類(.cs)文件?如果一個.cs文件中有幾個類,該怎麼辦?

換句話說,我需要解決方案明智的解釋彙編。

回答

1

internal意味着你可以「看」它(參考,派生等)從同一總成中的類(.DLL,.EXE)

問題:如果在A1ClassOne我有法訪問修飾符 「內部」,然後從哪些類訪問?

從是相同的組件,其中,該方法是內的所有類。

以上解決方案示例中的彙編代表什麼意思?整體解決方案或者每個 項目是不同的組件(解決方案中的兩個組件)?或者每個 類(.cs)文件?如果一個.cs文件中有幾個類,該怎麼辦?

.DLL是一個程序集。 .EXE也是如此,通常對應於一個項目,是的。

ProjectA (NameSpaceA) 
    - ref ProjectB 
    - ClassA1.cs 
     - A1ClassOne 
      - internal Method1 
     - A1ClassTwo 
    - ClassA2.cs 
ProjectB (NameSpaceB) 
    - ClassB1.cs 
    - ClassB2.cs 

大會 'A' 是A1ClassOneA1ClassTwo。可以從他們訪問Method1

組件'B'將是在ClassB1和ClassB2文件中定義的所有類。他們無法訪問Method1

+0

那麼,我的項目中的所有類都可以訪問類的內部成員?但是,如果我的解決方案中只有一個項目,內部和公共之間有什麼區別。通常在大多數情況下,一個解決方案中只有一個項目。 –

+0

不同之處在於,當您編譯DLL時,有人可以稍後將其添加爲其項目的引用。你的'內部'類/方法對他們來說是不可見的。公衆的會是。想象一下你的DLL是你想要提供給其他人的庫。你想暴露一切嗎? –

+0

感謝您的詳細解釋。從源文件的角度來看,我無法理解物理.exe程序集的概念。現在很明顯。 –