C# 中的訪問修飾符和聲明修飾符

轉載請註明出處!
  用了這麼久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的時候,則當使用子類 的類型來調用的是,它會運行子類的函數,類型是基類的時候,仍會調用子類函數。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章