c# 類和成員的修飾詳細(xì)介紹
更新時(shí)間:2012年11月21日 11:37:02 作者:
本文將詳細(xì)介紹c# 類和成員的修飾,需要的朋友可以參考下
基本概念:
一.類是對(duì)于業(yè)務(wù)處理對(duì)象的封裝, 包括狀態(tài)和行為的封裝.
二.類的成員種類:
1.常量: 數(shù)據(jù)值恒定不變的一個(gè)符號(hào)
2.字段: 字段表示一個(gè)只讀或者可讀寫的數(shù)據(jù)值. 通常用字段來標(biāo)識(shí)一個(gè)類或者類產(chǎn)生對(duì)象的某種狀態(tài),
在實(shí)踐中,通常將字段標(biāo)識(shí)為private, 避免從類/對(duì)象外破壞類/對(duì)象的狀態(tài)。
3.實(shí)例構(gòu)造器(Constructor):將新對(duì)象的實(shí)例字段初始化為良好初始狀態(tài)的一種特殊方法。
4.類型構(gòu)造器,也就是靜態(tài)的Constructor, 用來初始化類的靜態(tài)字段。
5.方法:一個(gè)特殊的函數(shù),用來更改或者查詢一個(gè)類型或者對(duì)象的狀態(tài)。
6.屬性:用來封裝字段在外部的訪問,避免直接訪問字段。
7.事件:封裝一個(gè)委托鏈,通過某種觸發(fā)機(jī)制,通知委托鏈中的方法執(zhí)行。
8.子類型:嵌套在類型中的類型,作用是分離復(fù)雜性。
9.操作符重載:重新定義在類所產(chǎn)生對(duì)象之間的特定操作:例如 +, -, ++等。
10.轉(zhuǎn)換操作符:定義如何顯示或者隱式的將類轉(zhuǎn)換為另外一種類型。
類的修飾關(guān)鍵字:
一. 可訪問性修飾:
1. public:用于非嵌套類,訪問無限制。
2.internal:用于非嵌套類,僅對(duì)定義程序集的所有代碼可見。
3.private:用于嵌套類,僅對(duì)包含它的類的成員可見。
4.protected:用于嵌套類,僅對(duì)包含它的類A以及A的派生類A_Derived中的成員可見。
二.靜態(tài)類修飾符
1.static:用于定義永遠(yuǎn)不需要實(shí)例化的類,例如Console, Math, Environment等。
2.靜態(tài)類不能繼承除System.Object以外的基類,也不能實(shí)現(xiàn)接口
3.靜態(tài)類只能定義靜態(tài)成員
4.靜態(tài)類不能作為字段,方法參數(shù)或者局部變量使用,因?yàn)樗鼈兌即硪昧艘粋€(gè)實(shí)例的變量。
三.分部類修飾符
1.Partial: 用于將一個(gè)類或者結(jié)構(gòu)分解成不同的邏輯單元,目的在于分解類型的復(fù)雜性。
2.常見場(chǎng)景在Winform定義窗體或者控件時(shí),自動(dòng)生成的前端單元和邏輯單元。
四.組件與多態(tài)修飾符
1.abstract: 表明一個(gè)抽象類,不能直接生成該類的實(shí)例,只能通過繼承的方式實(shí)現(xiàn)。
2.sealed: 表明該類型不能用于基類型。
3.new:用于在衍生類中定義的嵌套類型,表明該嵌套類型與基類中的同名嵌套類型無關(guān)。
類成員的修飾關(guān)鍵字
一.可訪問性:不詳細(xì)解釋,與類的修飾大同小異
1.public
2.private
3.protected
4.internal
二.靜態(tài)成員:不詳細(xì)解釋
三.組件與多態(tài)修飾:
1.abstract: 用于基類成員,表示為了構(gòu)造派生類型的實(shí)例,派生類型必須實(shí)現(xiàn)并且重寫這個(gè)方法。
2.virtual: 用于基類成員,表示這個(gè)成員可由派生類型重寫
3.override: 用于派生類成員,表示派生類型重寫了基類型的成員。
4.sealed: 用于基類成員,表示這個(gè)成員不能被派生類型重寫,只能用于方法。
5.new:用于派生類成員,表示這個(gè)成員與基類中的同名成員不存在重載關(guān)系。
本章知識(shí)最佳實(shí)踐
一.設(shè)計(jì)類和成員的可訪問性的最佳實(shí)踐:
1.定義類時(shí),除非確定它將作為基類使用,不然應(yīng)該講它指定為Sealed。
原因是:派生類型的行為不可預(yù)測(cè),如果基類沒有進(jìn)行密封,在后續(xù)版本中或者其他團(tuán)隊(duì)成員定義的派生類有可能會(huì)破壞基類的狀態(tài)或者預(yù)期行為。
2.定義類時(shí),如果不確定將在程序集外公布這個(gè)類,則應(yīng)該將類指定為internal。
原因也是出于安全性方面的考慮。
3.在類的內(nèi)部,所有數(shù)據(jù)字段都應(yīng)該定義為private,原因是出于對(duì)狀態(tài)的保護(hù)。每個(gè)類/對(duì)象的狀態(tài)都應(yīng)該只能由自己本身來控制。
4.在類的內(nèi)部,除非確定某個(gè)方法,屬性需要在子類中重寫,不然不要使用virtual。
原因有兩個(gè),一是調(diào)用虛方法在CLR中會(huì)消耗更多性能;二是虛方法會(huì)喪失基類對(duì)自身行為的控制權(quán)。
5.在類中定義嵌套類時(shí),應(yīng)將嵌套類修飾為private。這個(gè)規(guī)則在VS中會(huì)被強(qiáng)制檢查。
二.靜態(tài)類與單例模式的異同:
1.相同之處:都為類型成員提供單一入口
2.不同之處:
a.靜態(tài)類難以控制初始化時(shí)機(jī)
b.靜態(tài)類不支持基類,派生類,也不支持實(shí)現(xiàn)接口,對(duì)多態(tài)的支持性較差。
c.靜態(tài)類的實(shí)現(xiàn)較為簡(jiǎn)單,不支持多態(tài)的情況下安全性較高
一.類是對(duì)于業(yè)務(wù)處理對(duì)象的封裝, 包括狀態(tài)和行為的封裝.
二.類的成員種類:
1.常量: 數(shù)據(jù)值恒定不變的一個(gè)符號(hào)
2.字段: 字段表示一個(gè)只讀或者可讀寫的數(shù)據(jù)值. 通常用字段來標(biāo)識(shí)一個(gè)類或者類產(chǎn)生對(duì)象的某種狀態(tài),
在實(shí)踐中,通常將字段標(biāo)識(shí)為private, 避免從類/對(duì)象外破壞類/對(duì)象的狀態(tài)。
3.實(shí)例構(gòu)造器(Constructor):將新對(duì)象的實(shí)例字段初始化為良好初始狀態(tài)的一種特殊方法。
4.類型構(gòu)造器,也就是靜態(tài)的Constructor, 用來初始化類的靜態(tài)字段。
5.方法:一個(gè)特殊的函數(shù),用來更改或者查詢一個(gè)類型或者對(duì)象的狀態(tài)。
6.屬性:用來封裝字段在外部的訪問,避免直接訪問字段。
7.事件:封裝一個(gè)委托鏈,通過某種觸發(fā)機(jī)制,通知委托鏈中的方法執(zhí)行。
8.子類型:嵌套在類型中的類型,作用是分離復(fù)雜性。
9.操作符重載:重新定義在類所產(chǎn)生對(duì)象之間的特定操作:例如 +, -, ++等。
10.轉(zhuǎn)換操作符:定義如何顯示或者隱式的將類轉(zhuǎn)換為另外一種類型。
類的修飾關(guān)鍵字:
一. 可訪問性修飾:
1. public:用于非嵌套類,訪問無限制。
2.internal:用于非嵌套類,僅對(duì)定義程序集的所有代碼可見。
3.private:用于嵌套類,僅對(duì)包含它的類的成員可見。
4.protected:用于嵌套類,僅對(duì)包含它的類A以及A的派生類A_Derived中的成員可見。
二.靜態(tài)類修飾符
1.static:用于定義永遠(yuǎn)不需要實(shí)例化的類,例如Console, Math, Environment等。
2.靜態(tài)類不能繼承除System.Object以外的基類,也不能實(shí)現(xiàn)接口
3.靜態(tài)類只能定義靜態(tài)成員
4.靜態(tài)類不能作為字段,方法參數(shù)或者局部變量使用,因?yàn)樗鼈兌即硪昧艘粋€(gè)實(shí)例的變量。
三.分部類修飾符
1.Partial: 用于將一個(gè)類或者結(jié)構(gòu)分解成不同的邏輯單元,目的在于分解類型的復(fù)雜性。
2.常見場(chǎng)景在Winform定義窗體或者控件時(shí),自動(dòng)生成的前端單元和邏輯單元。
四.組件與多態(tài)修飾符
1.abstract: 表明一個(gè)抽象類,不能直接生成該類的實(shí)例,只能通過繼承的方式實(shí)現(xiàn)。
2.sealed: 表明該類型不能用于基類型。
3.new:用于在衍生類中定義的嵌套類型,表明該嵌套類型與基類中的同名嵌套類型無關(guān)。
類成員的修飾關(guān)鍵字
一.可訪問性:不詳細(xì)解釋,與類的修飾大同小異
1.public
2.private
3.protected
4.internal
二.靜態(tài)成員:不詳細(xì)解釋
三.組件與多態(tài)修飾:
1.abstract: 用于基類成員,表示為了構(gòu)造派生類型的實(shí)例,派生類型必須實(shí)現(xiàn)并且重寫這個(gè)方法。
2.virtual: 用于基類成員,表示這個(gè)成員可由派生類型重寫
3.override: 用于派生類成員,表示派生類型重寫了基類型的成員。
4.sealed: 用于基類成員,表示這個(gè)成員不能被派生類型重寫,只能用于方法。
5.new:用于派生類成員,表示這個(gè)成員與基類中的同名成員不存在重載關(guān)系。
本章知識(shí)最佳實(shí)踐
一.設(shè)計(jì)類和成員的可訪問性的最佳實(shí)踐:
1.定義類時(shí),除非確定它將作為基類使用,不然應(yīng)該講它指定為Sealed。
原因是:派生類型的行為不可預(yù)測(cè),如果基類沒有進(jìn)行密封,在后續(xù)版本中或者其他團(tuán)隊(duì)成員定義的派生類有可能會(huì)破壞基類的狀態(tài)或者預(yù)期行為。
2.定義類時(shí),如果不確定將在程序集外公布這個(gè)類,則應(yīng)該將類指定為internal。
原因也是出于安全性方面的考慮。
3.在類的內(nèi)部,所有數(shù)據(jù)字段都應(yīng)該定義為private,原因是出于對(duì)狀態(tài)的保護(hù)。每個(gè)類/對(duì)象的狀態(tài)都應(yīng)該只能由自己本身來控制。
4.在類的內(nèi)部,除非確定某個(gè)方法,屬性需要在子類中重寫,不然不要使用virtual。
原因有兩個(gè),一是調(diào)用虛方法在CLR中會(huì)消耗更多性能;二是虛方法會(huì)喪失基類對(duì)自身行為的控制權(quán)。
5.在類中定義嵌套類時(shí),應(yīng)將嵌套類修飾為private。這個(gè)規(guī)則在VS中會(huì)被強(qiáng)制檢查。
二.靜態(tài)類與單例模式的異同:
1.相同之處:都為類型成員提供單一入口
2.不同之處:
a.靜態(tài)類難以控制初始化時(shí)機(jī)
b.靜態(tài)類不支持基類,派生類,也不支持實(shí)現(xiàn)接口,對(duì)多態(tài)的支持性較差。
c.靜態(tài)類的實(shí)現(xiàn)較為簡(jiǎn)單,不支持多態(tài)的情況下安全性較高
相關(guān)文章
C#實(shí)現(xiàn)的Win32控制臺(tái)線程計(jì)時(shí)器功能示例
這篇文章主要介紹了C#實(shí)現(xiàn)的Win32控制臺(tái)線程計(jì)時(shí)器功能,結(jié)合實(shí)例形式分析了C#基于控制臺(tái)的時(shí)間操作相關(guān)技巧,需要的朋友可以參考下2016-08-08C#控制IE進(jìn)程關(guān)閉和緩存清理的實(shí)現(xiàn)代碼
這篇文章主要介紹了C#控制IE進(jìn)程關(guān)閉和緩存清理的實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-04-04C#使用async和await實(shí)現(xiàn)異步編程
本文詳細(xì)講解了C#使用async和await實(shí)現(xiàn)異步編程的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07Avalonia封裝實(shí)現(xiàn)指定組件允許拖動(dòng)的工具類
這篇文章主要為大家詳細(xì)介紹了Avalonia如何封裝實(shí)現(xiàn)指定組件允許拖動(dòng)的工具類,文中的示例代碼講解詳細(xì),感興趣的小伙伴快跟隨小編一起來學(xué)習(xí)學(xué)習(xí)吧2023-03-03