C#語(yǔ)言中的修飾符匯總
修飾符是用于限定類型以及類型成員的申明的一種符號(hào)。 下面主要從C#中的訪問(wèn)修飾符,作用于類和結(jié)構(gòu)的修飾符,用在方法或變量的修飾符和特殊作用的修飾符四種,來(lái)給大家介紹。
1. 訪問(wèn)修飾符
指定聲明的類型和類型成員的可訪問(wèn)性。
(1) public:是類型和類型成員的訪問(wèn)修飾符。公共訪問(wèn)是允許的最高訪問(wèn)級(jí)別。對(duì)訪問(wèn)公共成員沒(méi)有限制。
(2) private:是一個(gè)成員訪問(wèn)修飾符。私有訪問(wèn)是允許的最低訪問(wèn)級(jí)別。私有成員只有在聲明它們的類和結(jié) 構(gòu)體中才是可訪問(wèn)的。
(3) internal:是類型和類型成員的訪問(wèn)修飾符。只有在同一程序集的文件中,內(nèi)部類型或成員才是可訪問(wèn)的。
(4) protected:是一個(gè)成員訪問(wèn)修飾符。受保護(hù)成員在它的類中可訪問(wèn)并且可由派生類訪問(wèn)。
2. 可以作用于類和結(jié)構(gòu)的修飾符
(1) abstract:指示某個(gè)類只能是其他類的基類。
可以和類、方法、屬性、索引器及事件一起使用。在類聲明中使用 abstract修飾符以指示某個(gè)類只能是其他類的基類。標(biāo)記為抽象或包含在抽象類中的成員必須通過(guò)從抽象類派生的類來(lái)實(shí)現(xiàn)。
(2) sealed:指定類不能被繼承。
可以應(yīng)用于類、實(shí)例方法和屬性。密封類不能被繼承。密封方法會(huì)重寫基類中的方法,但其本身不能在任何派生類中進(jìn)一步重寫。當(dāng)應(yīng)用于方法或?qū)傩詴r(shí),sealed修飾符必須始終與override一起使用。
在類聲明中使用 sealed修飾符可防止繼承此類
(3) static:聲明屬于類型本身而不是屬于特定對(duì)象的成員。
聲明屬于類型本身而不是屬于特定對(duì)象的靜態(tài)成員。可用于類、字段、方法、屬性、運(yùn)算符、事件和構(gòu)造函數(shù),但不能用于索引器、析構(gòu)函數(shù)或類以外的類型。
(4) partial:在整個(gè)同一程序集中定義分部類和結(jié)構(gòu)。
分部類型定義允許將類、結(jié)構(gòu)或接口的定義拆分到多個(gè)文件中。
3. 只能用在方法或變量的修飾符
(1) const:指定無(wú)法修改字段或局部變量的值。
用于修改字段或局部變量的聲明。它指定字段或局部變量的值是常數(shù),不能被修改。
(2) new:從基類成員隱藏繼承的成員。
在用作修飾符時(shí),new關(guān)鍵字可以顯式隱藏從基類繼承的成員。隱藏繼承的成員意味著該成 員的派生版本將替換基類版本。在不使用 new修飾符的情況下隱藏成員是允許的,但會(huì)生成警告。使用 new顯式隱藏成員會(huì)取消此警告,并記錄代之以派生版本這一事實(shí)。
若要隱藏繼承的成員,請(qǐng)使用相同名稱在派生類中聲明該成員,并使用 new修飾符修飾該成員。
對(duì)同一成員同時(shí)使用 new和override是錯(cuò)誤的,因?yàn)檫@兩個(gè)修飾符在含義上相互排斥。使用 new會(huì)用同樣的名稱創(chuàng)建一個(gè)新成員并使原始成員變?yōu)殡[藏的,而 override則擴(kuò)展繼承成員的實(shí)現(xiàn)。
(3) virtual:在派生類中聲明其實(shí)現(xiàn)可由重寫成員更改的方法或訪問(wèn)器。
用于修飾方法、屬性、索引器或事件聲明,并且允許在派生類中重寫這些對(duì)象。
調(diào)用虛方法時(shí),將為重寫成員檢查該對(duì)象的運(yùn)行時(shí)類型。將調(diào)用大部分派生類中的該重寫成員,如果沒(méi)有派生類重寫該成員,則它可能是原始成員。
默認(rèn)情況下,方法是非虛擬的。不能重寫非虛方法。
virtual修飾符不能與 static、abstract和 override修飾符一起使用。
除了聲明和調(diào)用語(yǔ)法不同外,虛擬屬性的行為與抽象方法一樣。
(4) override:提供從基類繼承的虛擬成員的新實(shí)現(xiàn)。
要擴(kuò)展或修改繼承的方法、屬性、索引器或事件的抽象實(shí)現(xiàn)或虛實(shí)現(xiàn),必須使用 override修飾符。
(5) readonly:聲明一個(gè)字段,該字段只能賦值為該聲明的一部分或者在同一個(gè)類的構(gòu)造函數(shù)中。
是可以在字段上使用的修飾符。當(dāng)字段聲明包括 readonly修飾符時(shí),該聲明引入的字段賦值只能作為聲明的一部分出現(xiàn),或者出現(xiàn)在同一類的構(gòu)造函數(shù)中。在此示例中,字段year的值無(wú)法在ChangeYear方法中更改,即使在類構(gòu)造函數(shù)中給它賦了值。
4. 特殊作用的修飾符
(1) event:聲明事件。
類和結(jié)構(gòu)使用事件將出現(xiàn)的可能影響對(duì)象狀態(tài)的事件通知給對(duì)象。
(2) extern:指示在外部實(shí)現(xiàn)方法。
用于聲明在外部實(shí)現(xiàn)的方法。extern修飾符的常見用法是在使用 Interop 服務(wù) 調(diào)入非托管代碼時(shí)與DllImport屬性一起使用;在這種情況下,該方法還必須聲明為 static。
extern關(guān)鍵字還可以定義外部程序集別名,使得可以從單個(gè)程序集中引用同一組件的不同版本。
將 abstract和 extern修飾符一起使用來(lái)修改同一成員是錯(cuò)誤的。使用 extern修飾符意味著方法在 C# 代碼的外部實(shí)現(xiàn),而使用 abstract修飾符意味著在類中未提供方法實(shí)現(xiàn)。
(3) unsafe:聲明不安全的上下文。該上下文是任何涉及指針的操作所必需的。
(4) volatile:指示字段可由操作系統(tǒng)、硬件或并發(fā)執(zhí)行線程等在程序中進(jìn)行修改。
volatile關(guān)鍵字表示字段可能被多個(gè)并發(fā)執(zhí)行線程修改。聲明為 volatile的字段不受編譯器優(yōu)化(假定由單個(gè)線程訪問(wèn))的限制。這樣可以確保該字段在任何時(shí)間呈現(xiàn)的都是最新的值。
volatile修飾符通常用于由多個(gè)線程訪問(wèn)而不使用 lock 語(yǔ)句(C# 參考)語(yǔ)句對(duì)訪問(wèn)進(jìn)行序列化的字段。
volatile關(guān)鍵字可應(yīng)用于以下類型:
(1)引用類型。
(2)指針類型(在不安全的上下文中)。
(3)整型,如 sbyte、byte、short、ushort、int、uint、char、float 和 bool。
(4)具有整數(shù)基類型的枚舉類型。
(5)已知為引用類型的泛型類型參數(shù)。
(6)IntPtr 和 UIntPtr。
所涉及的類型必須是類或結(jié)構(gòu)的字段。不能將局部變量聲明為 volatile。
以上就是關(guān)于C#修飾符的所有內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。
相關(guān)文章
測(cè)試stringbuilder運(yùn)行效率示例
測(cè)試StringBuilder的運(yùn)行效率,大家參考使用吧2013-12-12基于不要返回null之EmptyFactory的應(yīng)用詳解
本篇文章對(duì)不要返回null之EmptyFactory進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C#中使用ADOMD.NET查詢多維數(shù)據(jù)集的實(shí)現(xiàn)方法
這篇文章主要介紹了C#中使用ADOMD.NET查詢多維數(shù)據(jù)集的實(shí)現(xiàn)方法,詳細(xì)講述了C#中使用ADOMD.NET查詢多維數(shù)據(jù)集的原理與實(shí)現(xiàn)技巧,需要的朋友可以參考下2014-10-10C#使用ZXing.Net實(shí)現(xiàn)生成二維碼和條碼
ZXing用Java實(shí)現(xiàn)的多種格式的一維二維條碼圖像處理庫(kù),而ZXing.Net是其.Net版本的實(shí)現(xiàn),下面我們就來(lái)看看 C#如何使用ZXing.Net實(shí)現(xiàn)生成二維碼和條碼吧2023-12-12C#實(shí)現(xiàn)自定義線程池實(shí)例代碼
這篇文章介紹了C#實(shí)現(xiàn)自定義線程池的實(shí)例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07C#中IEnumerable、ICollection、IList、List之間的區(qū)別
這篇文章主要介紹了C#中IEnumerable、ICollection、IList、List之間的區(qū)別,本文分別分析了它的實(shí)現(xiàn)源碼,從而總結(jié)出了它們之間的關(guān)系和不同之處,需要的朋友可以參考下2015-06-06C#實(shí)現(xiàn)日期格式轉(zhuǎn)換的公共方法類實(shí)例
這篇文章主要介紹了C#實(shí)現(xiàn)日期格式轉(zhuǎn)換的公共方法類,結(jié)合完整實(shí)例形式分析了C#針對(duì)各種常見日期格式的轉(zhuǎn)換方法,涉及C#字符串、日期、時(shí)間相關(guān)操作技巧,需要的朋友可以參考下2017-01-01