1-C#核心編程_第七章(定義類)(精)_第1頁
1-C#核心編程_第七章(定義類)(精)_第2頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 e 軟國甌卓越培訓num( ETC) 回顧 多態(tài)性 對象之間的關系 運算符重載 類定義 構造函數和析構函數 扌妾口和抽象類 C#使用關鍵字c I ass來定義類: class Myclass /Class Members; 定義了一個類后,就可以在項目中能訪問該定義的其他位 置對該類進行實例化。 默認情況下,類聲明為內部的,即只有當前項目中的代碼 才能訪問它,可以使用internal訪問修飾符顯示指定,如 下所示: (internal) class Myclass /Class Members; 本章目標 類 類定義 另外,還可以指定類是公共的,應該可以由 其他項目中的代碼來訪問。為此要使用

2、關鍵 字pub I ic: public cI ass MyCI ass /Cl ass members 除了這兩個訪問修飾符關鍵字外,還可以指定類是抽象的或 密封的。為此,可以使用兩個互斥的關鍵字abstract和 sealedo所以,抽象類必須用下述方式聲明: public abstract cI ass MyCI ass /Cl ass members, may be abstract. 其中除了MyC I ass是一個公共抽象類,也可以是內部抽象類 類 類定義 類定義 tuujiu 5ret 密封類的聲明如下戶斤奈 pub I i c/i nternaI sea Ied cI ass

3、MyCI ass /cl ass member. 與抽象類一樣,密封類也可以是公共的或內部的。 還可以在類中指定繼承: pub I i c cI ass MyCI ass:MyBase /Class member. 注意:在C#類定義中,只能有一個基類,如果繼承卩 叫猛公抽象類,就必須實現所繼承的所有抽象成員護 -、 _ 類定義 除了以這種方式指定基類外,還可以在冒號之后指定支 持的接口。如果指定了基類,它必須緊跟在冒號后,之后才 是指定的接口。如果沒有指定基類, 則接口就跟在冒號后, 必須使用逗號分隔基類名和接口名。 如給MyClass添加一個接口,如下所示: pub Ii c cI ass

4、 MyCI ass: I Mu Interface /CI ass member. 所有接口成員都必須在支持該接口中實現,但如果不想使用 給定的接口成員,就可以提供一個“空”的實現方式(沒有 函數代碼)。還可以把接口成員實現為抽象類中的抽象*類定義 以下是類定義中可以使用的訪問修飾符的組合。 i nterface I My I nterface/接口名稱以大寫字母I開 頭 /Interface member. 訪可修飾符關鍵字pub I ic和i nterna I的使用方式是 相同的,與類一樣,接口也默認定義為內部接口。 所以要使用接口可以公開訪問,必須使用public關 鍵字: pub I

5、ic i nterface I My Interface /I nterface member.含義 只能在蘭的項目中訪問類 可以在任何地方訪問類 public abstract 類可以在任何地方訪問,不能實例化, 只能供繼承所用 sealed或internal sealed 類只能在當前項目中訪問, 不能供派生 使用,只能實例化 接聲明接口的方式與類聲明的方式相似。但使用的 關鍵字是i nterface,而不是c I ass,例女口 : 修飾符 無或 internal public absiracl或iniemal abstract 類只能在當前項冃中訪問,個能實例化, 只能供繼承所用 pu

6、blic sealed 類可以在任何地方訪 不能在接口中使用關鍵字abstract和sea led,因為這兩個修 飾符在接口定義中是沒有意義的, 它們不包含實現代碼, 所 以不能直接實例化,且必須是可以繼承的。 接口的繼承也可以用與類繼承的方式來指定。主要的區(qū)別是 可以使用多個基接口,例如: pub Iic i nterface I My Interface:IMyBaseInterface, IMyBaseInterface2 接口不是類, 所以沒有繼承System. Objecto但為了方便起 見,System. Object的成員可以通過接口類型的變量來訪問 O 不能用實例化類的方式來實

7、例化接口。 /Interface member. 接接 構造函數和析構函數 在C#中定義類時,常常不需要定義相關的構造函數和析構函 數,因為在建立代碼時,如果沒有提供它們,編譯器會自動 添加它們。但是,如果如果需要,可以提供自己的構造函數 和析構函數,以便初始化對象和清理對象。 使用下述語法可以把一個簡單的構造函數添加到類中: CI ass MyCI ass pub I ic MyCI ass () 構造函數的執(zhí)行序列 任何構造函數都可以配置, 在執(zhí)行自己的代碼前調用其他構 造函數。 在開發(fā)過程中,對象常常不按照預期的那樣執(zhí)行,而是在調 用構造函數時出現錯誤。這常常是因為類繼承結構中的某 個基

8、類沒有正確實例化,或者沒有正確地給基類構造函數 提供信息。 為了實例化派生類,必須實例化它的基類,而要實例化這個 基類,又必須實例化這個基類的基類,這樣一直實例化到 System. Object (所有類的根) 為止。 結果無論使用什么 構造函數實例化一個類,總要先調用System. Objecto /Constructor 析構函數 在.NET中使用的析構函數(由System. Object類提供)叫做 FinalizeO,但這不是我們用于聲明析構函數的名稱。使用 下面的代碼,而不是重寫Final i ze (): cI ass MyCI ass MyC I ass () /析構函數體 生成

9、類 打開項目 在資源管理器窗口中選擇Program, cs,單機工具欄中的查看 視圖按鈕,或者直接右鍵查看視圖 顯示一個類圖CI assDeagraml. cd 單擊I My I nterface接口,在資源管理器窗口中,把位置屬性 改為右 右擊MyBase,選擇查看基類類型選項 拖動圖中的對象,生成較好的布局,類圖就完成了 luuiui 5rtu8m 類庫項目 除了在項目中把類放在不同的文件之外,還可以把它們放在 完全不同的項目中。如果一個項目什么都不包含,只包含 類,該項目就稱為類庫。 類庫項目編譯為.d 11程序集,在其他項目中添加對類庫項目 的引用,就可以訪問它的內容。這將擴展對象提供

10、的封裝 性,因為類庫可以進行修改和更新,而不會影響使用它們 的其他項目。這意味著,我們可以方便地升級類提供的服 務。 右鍵解決方案資源管理器 添加類庫 將Classi. cs重命名為MyExternalClass. cs 右鍵該項目,添加一個My I nterna IC lass, cs的新類 將親斤建類改成 I nternaI cI ass My InternaICI ass 右鍵該項目,生成 在控制臺應用程序項目上右鍵,添加引用,選擇瀏覽 在b i nDebug下找到CI assL i b. d I L 添加 可以在資源管理器窗口中看到添加進去的引用 雙擊剛添加的引用,可以查看其中包含的對

11、象 修改控制臺應用程序中的代碼: using ClassLibraryl; stat ic void Ma i n (str i ng args) MyExternaI Cl ass myobj = new MyExternaICI ass(); Conso I e. Wr i teL i ne (myob j ToStr i ng (); Console. ReadKey (); 接口和抽象類 相同: 都包含可以由派生類繼承的成員。都不能直接實例化,但可 以聲明這些類型的變量。這樣就可以使用多態(tài)性把繼承這兩 種類型的對象指定給它們的變量。接著通過這些變量來使用 這些類型的成員,但不能直接訪問派生類對象的其他成員。 區(qū)別: 派生類只能繼承一個基類,即只能直接繼承一個抽象類(但可以用一個繼承鏈包 含多個抽象類)。 類可以使用多個接口。 抽象類可以擁有抽象成員(沒有代碼體,且必須在派生類中實現,否則派生類本 身必須也是抽象類)和非抽象成員(它們擁有代碼體,也可以是虛擬的,這 樣就可以在派生類中重寫)。 接口成員必須都在使用接口的類上

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論