用了這麼久c#,竟然還對一些修飾符傻傻分不清楚!!!!在此特地寫一篇關於c#中各種修飾符的說明。
首先,簡單說明一下4個訪問修飾符(是新增到類、結構或成員宣告的關鍵字)
(網上一大堆
)public:
公有的,是型別和型別成員的訪問修飾符。對其訪問沒有限制。
internal:
內部的,是型別和型別成員的訪問修飾符。同乙個程式集中的所有類都可以訪問
private:
私有的,是乙個成員訪問修飾符。只有在宣告它們的類和結構中才可以訪問。
protected:
受保護的,是乙個成員訪問修飾符。只能在它的類和它的派生類中訪問。
protected internal:
訪問級別為 internal 或 protected。即,「同乙個程式集中的所有類,以及所有程式集中的子類都可以訪問。
注意:除了使用protected internal組合以外,
乙個成員或型別只能有乙個訪問修飾符。
如果在成員宣告中未指定訪問修飾符,則使用預設的訪問修飾(在此不特地說麵,最好都要明確新增訪問修飾符)。
接下來說明一下幾個宣告修飾符
static:
表示靜態。
當乙個方法被宣告為static時,這個方法是乙個靜態方法,編譯器會在編譯時保留這個方法的實現。也就是說,這個方法屬於類,但是不屬於任何成員,不管這個類的例項是否存在,它們都會存在。就像入口函式static void main,因為它是靜態函式,所以可以直接被呼叫。
使用static關鍵字的類可以不用例項化而直接使用。
abstract:
表示抽象,
指示所修飾的內容缺少實現或未完全實現。 abstract修飾符可用於類、方法、屬性、索引器和事件。在類宣告中使用abstract修飾符以指示某個類只能是其他類的基類。標記為抽象或包含在抽象類中的成員必須通過從抽象類派生的類來實現。
抽象類主要是為了被繼承,不能建立抽象類的例項。
包含乙個或多個抽象成員的類必定也是抽象的(抽象類)。
抽象函式不能有函式體,例如:public abstract void hello() {} 的宣告是錯誤的,應為public abstract voidhello();而在子類中進行對函式的具體實現。
sealed:
表示密封,
可以應用於類、例項方法和屬性。密封類不能被繼承。密封方法會重寫基類中的方法,但其本身不能在任何派生類中進一步重寫。當應用於方法或屬性時,sealed 修飾符必須始終與override一起使用。
virtual:
表示虛擬,
表明這個成員可以在派生類中被重寫。virtual可應用於方法,屬性,索引器和事件。virtual方法不僅可以在派生類中重寫,而且在所有的子類中都可以被重寫。而非虛方法不能被重寫。
宣告為virtual的方法被重寫時,派生類中可以使用base關鍵字訪問父類中的publid,protected成員。語法:base.member;
但base關鍵字不能跳過類層次結構中的多個層次,子類不能訪問祖父類的成員,base.base.member是非法的。
override:
表示重寫,提供派生類對基類方法的新的實現,重寫的方法必須和基類的方法有著相同的簽名(函式名、返回值、引數列表相同)。
override關鍵字不可以重寫基類非virtual修飾的方法和static修飾的靜態方法。
派生類的override方法和基類的virtual方法必須有相同的訪問許可權。不能用修飾符new、static、virtual或者
abstract修飾override方法。
派生類的override方法重寫的基類方法必須是virtual、abstract或者override的。
new:
表示新的,c#中,new的關鍵字主要有三個功能:
1、作為運算子用來建立類的乙個物件。 class obj = new class();
2、作為修飾符。
3、用於在泛型宣告中約束可能用作型別引數的引數型別。(這個不太清楚)
在這裡主要介紹第2個功能,作為修飾符的作用。
new宣告的方法,當使用子類的型別來呼叫的時候,它會執行子類的函式,而如果型別是基類的話,被隱藏的基類函式會被呼叫。
而子類中函式使用override的時候,則當使用子類的型別來呼叫的是,它會執行子類的函式,型別是基類的時候,仍會呼叫子類函式。
C 中的訪問修飾符 修飾符 類
版本visual studio 2010 主要參考 修飾符用於修改型別和型別成員的宣告 訪問修飾符 訪問級別 public 訪問不受限制 類內和任何類外中訪問 protected 可訪問域限定於類內或從該類派生的類內 類內和該類的派生類 internal 可訪問域限定於類所在的程式集內 該類所在程式...
python 修飾符 python訪問修飾符
許可權訪問 偽許可權,只是壓縮時按規則換了變數名,python 的哲學是假定使用者都會使用 xx 以單下劃線開頭的表示的是protected型別的變數。即保護型別只能允許其本身與子類進行訪問。若內部變數標示,如 當使用 from m import 時,不會將以乙個下劃線開頭的物件引入 成俗約定,不做...
C 修飾符 類修飾符和成員修飾符
c 修飾符之類修飾符 public internal partial abstract sealed static internal 本程式集內的成員可以訪問。partial 部分類,可以將乙個類分成幾部分寫在不同檔案中,最終編譯時將合併成乙個檔案,且各個部分不能分散在不同程式集中。c 修飾符之成員...