2013年11月15日 星期五

存取範圍層級internal與DLL介紹

本文參考文章連結
在理解什麼是Internal的時候在MSDN找到解釋是

第一
internal 修飾詞讓類別、介面或成員只能在目前封裝內看得見。
目前封裝外部的程式碼不能存取 internal 成員。

上文意思是指
限於在DLL或EXE中使用被修飾的類別 介面成員
意思是如果開新Windiws Form專案將DLL加入參考
DLL中被internal修飾的成員將無法調用

第二
類別和介面可以使用 internal 修飾詞來標記。
在全域範圍中,internal 修飾詞與 public 修飾詞相同。
類別或介面的任何成員都可以使用 internal 修飾詞來標記。

意思是指 類別或介面 在使用Internal修飾 如同Public
待會我們將會示範這個疑點

第三
您不能將 internal 修飾詞與其他任何可視性的
修飾詞 (publicprivateprotected) 結合使用。
可視性修飾詞與它們所定義的範圍有關。
例如,internal 類別的 public 方法不能公開存取
但是任何可以存取此類別的程式碼都可以存取此方法。

意思是指 public 與 Internal 不能共存拉 不對外公開只對內
就用internal就好,公開就public了唷~

來看範例比較快理解
首先我們先建立一個WindowsForm
而在此專案在新建一個Class檔
如下圖








建立的Class叫C1.cs
C1.cs檔案中的內容如下

 
 
 
首先來看上圖 第一個類別 公開的Class1
裡面的成員如上,將被Class2繼承
注意到不是只有protected可以被繼承喔
注意到internal同等public差別在於
internal只對內公開不對外
來看下圖Class2如何繼承Class1吧
 


 
上圖清楚看到
繼承了Class1成員完全沒問題啊
注意Public string GetProtectedInternal()
中的方法調用的是一個Internal
可以證明Internal是一個對內的Public
 
下圖將介紹Class3 Class4
 


 
上圖可以看到
Internal Class3
被Class4繼承
這兩個類別我們等等會在
新專案中把此類別加入參考
並且證明 Class3 與 Class4 是不會被調用的
下圖Class5則是證明
實體化物件中的internal成員如同
public也可以被調用 如下圖






















上圖 注意實體化的cla1與cla3
可以調用 Internal的成員喔!!



再來我們將 新建一個專案
再將上面OP專案中的C1.CS加入參考
將證明 internal Class3與Class4不會被調用

首先 開新專案


 
 
 
加入參考

 
 
選擇剛剛的專案位置op.exe


 
 
再來我們在專案中加入OP的命名空間

並且實體化類別
看可不可以調用類別中的成員
以及證明internal是不能被其他專案調用的
請看下圖即可明瞭




上圖Class3 與 Class4 因為是internal所以不會顯示
而C1.str則是公開成員 Class1 中的internal成員將不會顯示
C2也是

本章節介紹到此

沒有留言:

張貼留言