C#中的訪問修飾符


1. 簡述 private、 protected、 public、 internal 修飾符的訪問權限。
private : 私有成員, 在類的內部才可以訪問。
protected : 保護成員,該類內部和繼承類中可以訪問。
public : 公共成員,完全公開,沒有訪問限制。

internal: 在同一命名空間內可以訪問。

2、區分internal和protected

C#中 protected internal 和 internal 的區別

 
http://kudick.blog.163.com/blog/static/1666066320091055414453/   DoDo:

protected: 奶奶有一張銀行卡,媽媽可以用,女兒也可以用,隔壁老趙不可以用(因為老趙跟奶奶沒有繼承關系)

internal: 王總有一張銀行卡,秘書可以用,經理可以用,王總兒子不可以用(因為銀行卡屬於公家財務,只能由公司內部人員【同一個程序集】使用,王總兒子雖然繼承王總,但是他不是公司內部人員,所以也不能公款私用)

 

PS: 如果各個程序集使用了相同的強命名,那么internal也可以在不同的程序集下使用,就比如上面的internal例子,

王總有一張銀行卡(而且還有一本存折【存折相當於強命名】),同時王總的兒子也有一本存折【一樣的強命名】,那么王總的兒子也可以使用了,隔壁老王也有同樣的存折【強命名】所以他也可以取錢!!

    private<protected/internal<public 這個很明顯了。 關鍵是protected和internal的問題。   protected限定的是只有在繼承的子類中才可以訪問,可以跨程序集           internal限定的是只有在同一個程序集中才可以訪問,可以跨類    所以它們是有點交叉的。 當一個CLASS是ITERNAL的時候,要求其所有的成員的限定范圍不能大於internal。 所以,當一個INTERNAL的CLASS寫PROTECTED的時候,就需要兩個限定符了: internal   protected 這樣,限定了訪問范圍是:本程序集、繼承的子類。 因此,關系是: private<internal   protected<internal/protected<public internal和protected的具體范圍大小就不能准確的界頂了。
3、程序集:
被編譯到同一個dll或exe中的程序就是處於同一個程序集中,在不同的dll或exe文件中的程序就是處於不同的程序集中。

.net中的程序集就是一個編譯器直接生成的dll或可執行的exe文件,包含程序集清單、元數據和MSIL等。是一個或者多個類型定義及資源文件的集合體。
 
程序集,對於C#程序員來說一定不陌生,不就是VS生成的那些exe,dll么。是的,程序集(.net中exe與dll的區別就是exe有程序接入口,即Main函數)就是.net框架下,可以被CLR加載並運行的一堆數據集(類似java中的jar包,無法脫離虛擬機自己運行)。它們和之前C\C++生成的可執行程序和動態鏈接庫有本質的區別。
 
說了半天,程序集里到底有什么呢。作為一堆數據集,程序集的數據可以分為:類型元數據,程序元數據,IL代碼,資源。

 
先說下什么是元數據,元數據一般就是指描述自身的數據。

 
程序集元數據:包含程序集的版本信息,安全信息,簽名等。

 
類型元數據:記錄了程序集將引用了哪些類,用戶自定義了哪些類,字段,數據類型等一系列信息(VS的編程助手靠的就是反射獲取類型元數據)。

 
IL代碼:MSIL,微軟中間語言,微軟跨語言的根基所在,所有的C#代碼都編譯成IL代碼,保存在程序集中,在被CLR加載后,由JIT調用BCL,FTL即時編譯成機器碼來讓CPU運行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM