程序設計基礎教程_第1頁
程序設計基礎教程_第2頁
程序設計基礎教程_第3頁
程序設計基礎教程_第4頁
程序設計基礎教程_第5頁
已閱讀5頁,還剩407頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、.C# 課件課件第一章第一章第二章第二章第三章第三章第四章第四章第五章第五章第六章第六章第七章第七章第八章第八章第九章第九章第十章第十章ACCP 4.0補充補充.NET 平臺以及Visual Studio.NET IDE簡介 第一章第一章.目標 討論計算、Internet 和應用程序開發(fā)的轉變 了解對 .NET 的需求 解釋 CLR 和 IL 的角色 Visual Studio.NET IDE簡介.集中式計算啞終端主機集中式計算.客戶端/服務器計算客戶端 - 服務器計算客戶端:智能終端服務器PC數(shù)據大的話網絡就不好了.分布式計算2-1分布式計算智能終端網絡網絡在本地分布式計算中,計算機通常位于

2、 LAN 中.分布式計算 2-2網絡網絡.計算方案的轉變集中計算客戶端 - 服務器計算分布式計算Internet.當前的 InternetWeb 服務器InternetWeb 服務器Web 服務器今天的今天的 Web 站點是獨立的孤島站點是獨立的孤島 Web 提供數(shù)據的提供數(shù)據的 HTML“圖片圖片”,而不是實際的數(shù)據而不是實際的數(shù)據 瀏覽器:變相的只讀啞終端瀏覽器:變相的只讀啞終端 結構與舊的分時模型相同結構與舊的分時模型相同 要進行個性化,需要在每個站點輸要進行個性化,需要在每個站點輸入相同的個人信息入相同的個人信息!.目前存在的難題家庭辦公室聯(lián)機信息其他信息脫機信息電子郵件需要個人個人信

3、息空間信息空間用戶用戶開發(fā)人員開發(fā)人員 生成、測試和部署站點的工具不足重用不好(c+寫的vb再用) 站點通常較吸引人,但沒什么用處需要創(chuàng)建應用程序并將其布署到多臺設備的工具.Internet 的轉變Web 服務器Web 服務器Web 服務器Web 服務器Web 服務器Web 服務器組合體組合體作為孤島的作為孤島的 Web 站點站點站點、服務和設備彼此協(xié)作,共同提供豐富的用戶體驗。.應用程序開發(fā)的演變Internet任何人在任何位置都可以使用應用程序軟件作為服務提供資源豐富,基于應用程序資源豐富,基于應用程序來控制來控制 應用程序集成在本地系統(tǒng)服務中推向市場時間短更高的開發(fā)效率更高質量軟件 應用

4、程序和網絡上所有應用程序集成在一起,從而創(chuàng)造獨特的價值 因此,可以將焦點集中在創(chuàng)建獨特的商業(yè)價值,不必關注建造基礎設施 應用程序(Web 服務)在Internet/Intranet 中公開其程序特點 開發(fā)者通過調用 Web API 將 Web 服務集成到應用程序中 Web 上的組件編程!.NET - 演變的結果2-1融合計算和通訊形成組合體,不再是孤島!分布式計算-本地進行軟件成為服務應用程序可由任何人在任何地方使用.NET -演變的結果 2-2融合計算和通訊形成組合體,而不是孤島!分布式計算本地進行軟件成為服務應用程序可以由任何人在任何地方使用.NET - 將 DC(個人計算) 向前推進了一

5、步2-1其他其他.NET 設備設備個人個人信息空間信息空間.用戶數(shù)據存放在網絡上 - 可以隨時隨地進行訪問可以從任何 .NET 設備訪問數(shù)據創(chuàng)建可以通過任何瀏覽器、任何設備訪問的應用程序.NET 應用程序利用了 Internet 的功能.NET - 以 Internet 為中心的一種全新的平臺.NET - 將 DC 向前推進了一步2-2.NET 所支持的語言C#VB.NETEiffelCOBOLSmallTalkADAPythonJScript.NETVC+.代碼代碼被執(zhí)行被執(zhí)行C+VB編譯器編譯器編譯器編譯器可執(zhí)行可執(zhí)行代碼代碼可執(zhí)行可執(zhí)行代碼代碼RUNTIMERUNTIME語言特定的編譯器

6、和運行庫.代碼代碼被執(zhí)行被執(zhí)行C#VB.net編譯器編譯器編譯器編譯器可執(zhí)行可執(zhí)行代碼代碼可執(zhí)行可執(zhí)行代碼代碼RUNTIMERUNTIMEIL+元數(shù)據CLRIL 和 CLR 的使用Common Language Runtime.執(zhí)行 .NET 程序MSIL+元數(shù)據機器代碼代碼被執(zhí)行CLR第一次編譯第一次編譯第二次編譯第二次編譯.NET 程序被編譯兩次,第一次編譯很慢,而第二次編譯較快!語言語言編譯器編譯器.NET 源代碼.Microsoft 中間語言MSIL+元數(shù)據機器代碼代碼 被執(zhí)行CLRMSIL幫助語言實現(xiàn)互操作IL 不是字節(jié)代碼,但很接近字節(jié)代碼。因此,執(zhí)行應用程序時,IL 到機器碼的轉

7、換速度非??欤⊥ㄟ^ CLR將 MSIL 轉換為具體 CPU 的代碼CPU 無關 的指令集語言語言編譯器編譯器.NET 源代碼.公共語言運行庫CLR.NET 源代碼MSIL+元數(shù)據機器代碼代碼被執(zhí)行管理內存易于設計組件和應用程序,其對象可以跨語言互動跨語言集成(特別是跨語言繼承)一次編譯,就可運行在支持運行庫的任何 CPU 和操作系統(tǒng)上語言語言編譯器編譯器.VS.NET IDE幫助系統(tǒng)演示.VS.NET IDE設計器演示.VS.NET IDE窗口管理演示.總結 .NET 是以 Internet 為中心的一種全新的平臺 通過 .NET,可以將用戶數(shù)據存放在網絡上,并且隨時隨地通過與 .NET 兼容

8、的任何設備訪問這些數(shù)據 NET 獨一無二的特征是可以提供多語言支持 以 .NET 語言編寫的源代碼將被編譯兩次,第一次由語言特定的編譯器從源代碼編譯為 IL,第二次從 IL 編譯為機器碼.Microsoft.NET 平臺組件 第二章.回顧 .NET 是以 Internet 為中心的一種全新平臺 通過 .NET,可以將用戶數(shù)據存放到網絡上,隨時隨地通過與 .NET 兼容的任何設備訪問該數(shù)據 .NET 獨一無二的特征是提供多語言支持 以 .NET 語言編寫的源代碼被編譯兩次,一次由語言特定的編譯器從源代碼編譯成 IL,第二次從 IL 編譯成機器碼.目標 描述 Microsoft.NET 的核心組件

9、 討論 .NET 框架并列出其組件 談論.NET優(yōu)點.Microsoft.NET 的組件MS.NET產品和服務產品和服務第三方第三方 .NET 服務服務MS.NET平臺平臺VS.NETMSN.NETOffice.NETbCentral serverfor .NETWindows.NET.Net 基礎結構基礎結構和工具和工具.Net 用戶體驗用戶體驗.NET 生成生成塊服務塊服務.NET 設備軟件設備軟件一些有機會生產構建在一些有機會生產構建在 .NET 平平臺上的服務的合作伙伴和開發(fā)人臺上的服務的合作伙伴和開發(fā)人員員.Microsoft.Net 平臺的功能Internet協(xié)議協(xié)議XMLInte

10、rnet協(xié)議XMLMicrosoft.NET構建在 XML 和 Internet 協(xié)議的基礎之上用于開發(fā)新 一代軟件的一套工具和服務集旨在使對 Internet 上的任何資源組進行集成/編排成為可能可以更快更容易地設計、實現(xiàn)和部署協(xié)作式 Web 解決方案.XMLInternet協(xié)議協(xié)議XMLMicrosoft.NET將實際數(shù)據與表現(xiàn)形式分開構建新一代 Internet 的關鍵;使得能夠對信息進行整理、編程和編輯提供了一種將數(shù)據發(fā)布到多種設備的方法使站點能夠進行協(xié)作并提供能夠彼此交互的 Web 類型豐富、性能高不用類型轉換、穿透防火墻服務組合體.SOAP 的功能Internet協(xié)議協(xié)議XMLMi

11、crosoft.NETMicrosoft.NET 構建在 HTTP 和 SOAP(簡單對象訪問協(xié)議)等現(xiàn)有協(xié)議上SOAP 是基于 XML/HTTP 的協(xié)議SOAP 允許以獨立于平臺的方式訪問服務、對象和服務器SOAP 用于在分散的分布式環(huán)境中交換信息.Microsoft.NET 平臺編排.NET框架框架.NETEnterprise Server.NET 生生成塊服務成塊服務Windows CE、Windows ME、Windows 2000 和和 Windows.NET.編排Windows (CE、 ME、 2000 和和.NET).NET框架框架 .NETEnterprise Server.

12、NET 生成生成塊服務塊服務.NET 平臺構建在 Windows 2000 服務器系列的可伸縮性、可伸縮性、可靠性、可靠性、安全性安全性和可管理性可管理性基礎之上選擇 Windows 2000 系列.NET框架框架編排.NETEnterprise ServerWindows (CE、 ME、2000 和和 .NET).NET 生成生成塊服務塊服務Web服務服務WebUI數(shù)據和數(shù)據和 XML基類基類公共語言運行庫Microsoft.NET 框架的組件.NETEnterpriseServer編排.NET框架框架Windows (CE、 ME、2000 和和 .NET).NET 生成生成塊服務塊服務

13、 通過服務器系列可以快速生成和管理一個集成的、支持 Web 的企業(yè)系統(tǒng) 可伸縮性設計 可以與最新的 Internet 和數(shù)據標準實現(xiàn)互操作安裝 SQL Server 2000Internet Security & Acceleration (ISA) Server 2000Host Integration ServerExchange 2000 Server & Exchange 2000 Conferencing ServerCommerce Server 2000BizTalk Server 2000Application Server 20007 個核心個核心 .NET

14、Enterprise Server.NET Enterprise Server.NET 生成生成塊服務塊服務編排.NET框架框架.NETEnterprise ServerWindows(CE、 ME、2000 和和 .NET)由 Microsoft 和其他 ASP (應用程序提供)提供的商業(yè) Web 服務這些服務可以在其他應用程序 / Web 服務中使用核心.NET 生成塊服務;通知個性化日歷動態(tài)提供.NET 生成塊服務.業(yè)務進程Web 服務組織 A組織 B 在組織內部以及在組織之間 多個客戶、合作伙伴和服務提供商場所進程和 Web 服務運行在編排.NET框架框架.NETEnterprise

15、Server.NET 生成生成塊服務塊服務Windows(CE、 ME、2000 和和 .NET)BizTalk Server 2000 為此編排服務提供這些工具。業(yè)務進程.NET框架作用 提供一個一致的面向對象的編程環(huán)境 提供一個將軟件部署和版本控制沖突最小化的代碼執(zhí)行環(huán)境 提供一個保證代碼安全執(zhí)行的代碼執(zhí)行環(huán)境 提供一個可消除腳本環(huán)境或解釋環(huán)境的性能問題的代碼執(zhí)行環(huán)境 使開發(fā)人員的經驗在面對類型大不相同的應用程序時保持一致 按照工業(yè)標準生成所有通信,以確?;?.NET Framework 的代碼可與任何其他代碼集成.NET Framework體系結構W i n d o w s公 共 語

16、言 運 行 庫基 類 庫A D O . N E TA S P . N E T公 共 語 言 規(guī) 范C #Visual Studio.NETV BC + +. . .W i n d o w s 窗 體X M LC O M + 服 務.NET Framework 核心組件 公共語言運行庫 .NET Framework 類庫 基類庫 擴展類庫.Microsoft. NET Framework 的體系結構操作系統(tǒng)公共語言運行時 (CLR).Net Framework 類庫 (FCL).NET Framework 的組件基本框架類.Net Framework.Net Framework 類庫類庫ASP.

17、NETCLSCLRCTS.公共語言運行庫 公共語言運行庫是建立在操作系統(tǒng)之上 公共語言運行庫作用 管理內存 線程執(zhí)行 代碼執(zhí)行 代碼安全驗證 編譯以及其他系統(tǒng)服務.托管代碼定義 以運行庫為目標的代碼稱為托管代碼 C+分成兩種,一種是托管C+,另外一種是非托管C+ C#是以運行庫為目標設計的,因此用C#編寫的代碼基本上為托管代碼 不以運行庫為目標的代碼稱為非托管代碼 .NET提供了與非托管代碼互操作的服務,比如與COM互操作的Interop服務.NET Framework框架類庫 .NET Framework 類庫提供一組豐富的接口以及抽象類和具體(非抽象)類 可以按原樣使用這些具體的類,或者在

18、多數(shù)情況下從這些類派生自己的類 若要使用接口的功能,既可以創(chuàng)建實現(xiàn)接口的類,也可以從某個實現(xiàn)接口的 .NET Framework 類中派生類.公共語言規(guī)范(CLS) 公共語言規(guī)范 (CLS)是許多應用程序所需的一套基本語言功能 CLS 規(guī)則定義了通用類型系統(tǒng)的子集 CLS 通過定義一組開發(fā)人員可以確信在多種語言中都可用的功能來增強和確保語言互用性 大多數(shù)由 .NET Framework 類庫中的類型定義的成員都符合 CLS.使用VS.NET進行.NET應用開發(fā) Windows應用程序開發(fā) ASP.NET應用程序開發(fā) 移動設備應用程序開發(fā) Web Services 構建.NET分布式系統(tǒng).NET

19、特點總結4-1統(tǒng)一的API 傳統(tǒng)的編程模式 VB、VC、Delphi采用不同的編程模式和編程API Windows編程和Web編程采用不同的編程模式 .NET編程模式 將所有的API組織在框架類庫中,VB.NET,C#,VC.NET可以調用相同的API實現(xiàn)相同功能 ASP.NET Web窗體編程模式類似于VB的Web窗體設計器.NET特點總結4-2自動內存管理 傳統(tǒng)內存管理模式 開發(fā)者可以操縱內存,為內存管理提高了靈活性,同時也降低了安全性、穩(wěn)定性 COM中采用引用計數(shù)的方法實現(xiàn)內存管理,但是容易出現(xiàn)循環(huán)引用的問題 .NET內存管理模式 由.NET Framework CLR實現(xiàn)內存分配 由.

20、NET Framework CLR實現(xiàn)垃圾收集和垃圾回收.NET特點總結4-3安全類型系統(tǒng) 在.NET框架中不會有不安全的類型表 不會產生某一個類型的指針指向另外一個類型的情況 不可能有無初始化的變量,不可能索引超出邊界的數(shù)組等等.NET特點總結4-4 安全意外處理 零安裝(自我描述) 更好的版本控制 多語言支持 與COM的互操作性 XML Web Service.總結 .NET 是以 Internet 為中心的一種應用程序開發(fā)平臺。 此平臺的主要優(yōu)點在于用戶可以隨時隨地使用與 .NET 兼容的設備訪問所有重要數(shù)據。 Microsoft.NET 主要由三個組件構成,即 Microsoft.NE

21、T 產品和服務、.NET 平臺本身以及第三方 .NET 服務。 .NET 平臺構成了獨立于語言,可以從各種.NET 兼容設備上運行的應用程序的基礎。 .NET 平臺基于兩種核心技術,即 XML 和 Internet 協(xié)議套件。.C# 基礎知識第三章第三章.回顧 第二章 - - Microsoft .NET 的組件 .NET 是以是以 Internet 為中心的一種應用程序開發(fā)平臺為中心的一種應用程序開發(fā)平臺。 此平臺的主要優(yōu)點在于用戶可以隨時隨地使用與此平臺的主要優(yōu)點在于用戶可以隨時隨地使用與 .NET 兼容兼容的設備訪問所有的重要數(shù)據的設備訪問所有的重要數(shù)據。 Microsoft.NET 主

22、要由三個組件組成主要由三個組件組成,即即 Microsoft.NET 產產品和服務品和服務、.NET 平臺本身以及第三方平臺本身以及第三方 .NET 服務服務。 .NET 平臺構成了獨立于語言平臺構成了獨立于語言,可以從各種可以從各種 .NET 兼容設備兼容設備上運行的應用程序的基礎。上運行的應用程序的基礎。 .NET 平臺基于兩種核心技術平臺基于兩種核心技術,即即 XML 和和 Internet 協(xié)議套協(xié)議套件。件。.目標 討論 C# 中的類 討論C#程序中的流程控制 闡釋 C# 中的基本數(shù)據類型 討論 裝箱和取消裝箱的概念 討論結構 討論枚舉類型 使用C#編寫簡單程序.Microsoft

23、.NET開發(fā) Windows 應用程序和 Web 應用程序的新平臺支持超過 20 種語言為 Windows 編程的可用功能帶來了變革.C# 簡介充分利用了 .NET 平臺C#編譯器是.NET 家族中最高效的編譯器C+ 的最新?lián)Q代產品通過強制腳本類型檢查,提高了開發(fā)人員的工作效率并增強了安全性允許有限制地使用本機指針.C# 程序流一個簡單的 C# 程序 -本程序將顯示消息本程序將顯示消息: :這是這是HelloWorld程序程序.C# 編程構造3-1C# 中的變量以下列方式進行聲明: AccessModifier DataType VariablePublicPrivateProtectedin

24、tstringfloat.C#編程構造3-2 如果需要使用任何關鍵字作為變量名稱,必須為該變量名稱添加前綴 本程序的輸出消息本程序的輸出消息: :string是一個關鍵字但在本例用作一個變是一個關鍵字但在本例用作一個變量名量名.C# 編程構造3-3using System;class Test static void Main() int array1 = new int5; Console.WriteLine(10 * array12); 本示例本示例的輸出的輸出結果是結果是0.默認值 常用數(shù)據類型的默認值:.C# 中的輸入/輸出3-1使用 System 命名空間中的 Console 類的方

25、法最常用的方法 Console.ReadLine( ) Console.WriteLine( ).C# 中的輸入/輸出 3-2using System;class TestDefaultValues static void Main() int number, result; number=5; result=100 * number; Console.WriteLine(“當當 100 與數(shù)字與數(shù)字 0 相乘時,結果為相乘時,結果為 1 , number, result); 突出顯示的代碼行起著占位符的作用,即指定變量結果突出顯示的代碼行起著占位符的作用,即指定變量結果值的顯示位置值的顯示位

26、置。 index,alignment:formatString)可選整數(shù),指示包含格式化值的區(qū)域的最小寬度。如果格式化值的長度小于對齊,則用空格填充該區(qū)域。如果對齊為負,則格式化的值將在該區(qū)域中左對齊;如果為正,則格式化的值將右對齊。如果沒有指定對齊,則該區(qū)域的長度為格式化值的長度。如果指定對齊,則需用逗號分隔。G常規(guī),E 或 F 中較短的F浮點數(shù),常規(guī)表示法E用 E 表示法表示的浮點數(shù)(其中,E 代表 10 的次冪) N帶有分隔符的浮點數(shù)(在美國為逗號)C貨幣,帶有貨幣符號和分隔符(在美國為逗號)D十進制數(shù),僅用于整型X十六進制數(shù),僅用于整型.C# 中的輸入/輸出 3-3示例接受了一行的用戶

27、輸入示例接受了一行的用戶輸入, ,并將其回顯為輸出并將其回顯為輸出.if 結構2-1用于執(zhí)行條件分支語法 表達式需要始終為 Boolean 類型的表達式.If結構2-2上面的代碼段將顯示錯誤消息上面的代碼段將顯示錯誤消息 錯誤錯誤 CS0029:無法將類型無法將類型“string”隱式轉換為類型隱式轉換為類型“bool”.switch 語句2-1 語法 -每個每個case分支必須有一個分支必須有一個break語句語句.switch 語句2-2Switch結構結構可以充當多個可以充當多個if語句語句.循環(huán)結構當特定條件為 true 時執(zhí)行一組特定的指令,或將特定指令組執(zhí)行一定次數(shù)循環(huán)結構的類型

28、- while 循環(huán)循環(huán) do 循環(huán)循環(huán) for 循環(huán)循環(huán) foreach 循環(huán)循環(huán).while 循環(huán)while 循環(huán)執(zhí)行一組語句,直至指定條件為 falsebreak 語句 - 隨時跳出循環(huán)continue 語句 - 跳過當前循環(huán),并開始下一循環(huán).do 循環(huán)語法 -在條件檢查之前在條件檢查之前, ,循環(huán)體中的語句組至少執(zhí)行一次循環(huán)體中的語句組至少執(zhí)行一次.for 循環(huán)語法 -int sum=1;for(count=0;count10;count+) sum+;forfor語句循環(huán)語句循環(huán)1010次次,sum的的最終結果是的的最終結果是1010。.foreach 循環(huán)2-1foreach 循環(huán)

29、用于通過集合或數(shù)組來循環(huán)語法 -.foreach 循環(huán) 2-2using System;public class ForEachLoop static void Main(String args) int index; String array1=new String3; for(index=0;index3;index+) array1index=argsindex; foreach(String strName in array1) Console.WriteLine(strName); .C# 中的構造函數(shù)C# 中的構造函數(shù)與類同名class MyConstructorExpublic

30、MyConstructorEx()/MyConstructorEx 構造函數(shù).C# 中的析構函數(shù) C# 中的析構函數(shù)與類也同名class MyConstructorEx public MyConstructorEx() /MyConstructorEx 構造函數(shù) public MyConstructorEx() /MyConstructorEx 析構函數(shù) .C# 的基本類型2-1C# 的數(shù)據類型分為兩種基本類型 值類型值類型int、char 和結構和結構 引用類型引用類型類、接口、數(shù)組和字符串類、接口、數(shù)組和字符串.C# 的基本類型2-2 值類型 僅在內存中保存值 存儲與堆棧中 引用類型 將對

31、象的地址存儲與堆中 null表示沒有應用任何對象 .值類型variableVal是值類型是值類型輸出結果為輸出結果為100100,而不而不是是200200.引用類型using System;class DataTypeTest public int variableVal;class DataTypeTestRef static void Main() DataTypeTest dataTest = new DataTypeTest(); dataTest.variableVal = 100; funcDataTypeTest(dataTest); Console.WriteLine(data

32、Test.variableVal); static void funcDataTypeTest(DataTypeTest dataTest) int tempVar=10; dataTest.variableVal = tempVar*20; .值類型和引用類型值引用變量保存實際值引用存儲位置內聯(lián)(堆棧)堆默認值零Null傳遞給函數(shù)的參數(shù)值的副本引用的副本.裝箱和取消裝箱裝箱是從值類型到引用類型的轉換取消裝箱是從引用類型到值類型的轉換示例.C# 中的數(shù)據類型處理C# 提供了一種“統(tǒng)一類型系統(tǒng)” C# 中所有數(shù)據類型都是從一個類即 object 類派生而來的.靜態(tài)成員成員不與任何特定的對象或類關

33、聯(lián)僅可以有一個實例static int staticMem;static int instanceCount()/instanceCount 實現(xiàn).數(shù)組一組具有類似數(shù)據類型的值屬于引用類型,因此存儲于堆中C# 中的數(shù)組聲明語法如下 DataTypenumber of elements ArrayName;int6 array1;.結構結構屬于值類型可以有方法可以擁有構造函數(shù)不能實現(xiàn)繼承struct structEx public int structDataMember; public void structEx() /構造函數(shù)實現(xiàn) public void structMethod1() /s

34、tructMethod1 實現(xiàn) .枚舉類型2-1public class Holiday public enum WeekDays Monday,Tuesday,Wednesday,Thursday,Friday public void GetWeekDays(String EmpName, WeekDays DayOff) /處理處理 WeekDays static void Main() Holiday myHoliday = new Holiday(); myHoliday.GetWeekDays(Richie, Holiday.WeekDays.Wednesday); 程序中聲明了僅接

35、受程序中聲明了僅接受5 5個值的枚舉類型個值的枚舉類型WeekDays.枚舉類型2-2C# 中的枚舉數(shù)都有與值相關聯(lián)的數(shù)字默認情況下,枚舉數(shù)的第一個元素被指定為 0 值,后續(xù)的各個枚舉數(shù)元素的值依次遞增默認值可以在初始化階段中重寫.編譯和運行步驟 1 - 在記事本中輸入代碼步驟 2 - 使用 .cs 擴展名保存文件步驟 3 - 切換至 DOS 提示符,再輸入以下命令要運行 C# 文件,可以鍵入不帶擴展名的文件名csc csc First.cs .總結在 C# 中,數(shù)據類型分為兩種基本類型,即值類型和引用類型。裝箱是指從值類型到引用類型的轉換,而取消裝箱是指從引用類型到值類型的轉換。C# 中的結

36、構內部可以定義方法,也可以擁有構造函數(shù)。枚舉類型是聲明一組命名常數(shù)的獨特類型。.在 C# 中實現(xiàn) OOP 概念第四章第四章.作業(yè)點評 變量沒初始化 結構的構造函數(shù)沒有指定參數(shù) String string 引用(字符串)String是固定不變的,在進行字符串連接的時候是新建一個字符串,進行連接后,最后賦值,如果對String賦值多次,就會在內存中保存多個這個對象的副本,浪費系統(tǒng)資源 Csc 靜態(tài) 其它例子.回顧 第三章C#基礎 C#變量的聲明方式如下變量的聲明方式如下: AccessModifier DataType VariableName; 在在C#中,數(shù)據類型分為兩種基本類型,即中,數(shù)據類

37、型分為兩種基本類型,即值類型和引用類型。值類型和引用類型。 裝箱是指從值類型到引用類型的轉換,而裝箱是指從值類型到引用類型的轉換,而取消裝箱是指從引用類型到值類型的轉換。取消裝箱是指從引用類型到值類型的轉換。 C#的結構內部可以定義方法,也可以擁有的結構內部可以定義方法,也可以擁有構造函數(shù)。構造函數(shù)。.目標 在C#中使用構造函數(shù) 在C#中使用析構函數(shù) 解釋垃圾回收器的工作原理 討論方法重載 討論操作符重載 在C#中使用繼承 討論C#中的重寫.C# 中的構造函數(shù)3-1是類中的特殊類型的方法是每次創(chuàng)建對象時要調用的函數(shù)通常用于初始化與類同名不返回值.構造函數(shù)3-2using System;publ

38、ic class DaysInYear private int days; public DaysInYear() days = 365; static void Main(String args) DaysInYear newDaysInYear=new DaysInYear(); Console.WriteLine(newDaysInYear.days); 無構造函數(shù)輸出無構造函數(shù)輸出的結果是的結果是0 0有構造函數(shù)輸出有構造函數(shù)輸出結果是結果是365365.帶參數(shù)的構造函數(shù)3-3public class DaysInYear private int days; public DaysIn

39、Year() days = 365; public DaysInYear(int day) days = day; public DaysInYear(String dayOne) days =Convert.ToInt32(dayOne); public void setDay(int newDays) days = newDays; 傳遞不同個數(shù)的參數(shù)傳遞不同個數(shù)的參數(shù) 傳遞個數(shù)相同但類型傳遞個數(shù)相同但類型不同的參數(shù)不同的參數(shù).C# 中的析構函數(shù)由C#中的垃圾回收器調用垃圾回收器通過銷毀不再需要或不再被引用的對象來釋放內存語法 DaysInYear()/ 析構函數(shù)實現(xiàn)析構函數(shù)實現(xiàn)不能對結構

40、使用析構函數(shù)。只能對類使用析構函數(shù)。一個類只能有一個析構函數(shù)。無法繼承或重載析構函數(shù)。無法調用析構函數(shù)。它們是被自動調用的。析構函數(shù)既沒有修飾符,也沒有參數(shù)。.垃圾回收器3-1垃圾回收器的工作原理 如果為定義析構函數(shù)的對象分配了內存,運行如果為定義析構函數(shù)的對象分配了內存,運行庫將庫將把該對象添加到需要銷毀的對象的列表中。把該對象添加到需要銷毀的對象的列表中。 垃圾回收垃圾回收器定期檢查器定期檢查有沒有不再被引用的對象有沒有不再被引用的對象 如果如果找到了找到了其名稱沒有列在銷毀器列表中的對其名稱沒有列在銷毀器列表中的對象,就立即清除該對象。象,就立即清除該對象。 完成垃圾回收后完成垃圾回收后

41、,將調用銷毀器線程,該線程調將調用銷毀器線程,該線程調用有標記為用有標記為“準備銷毀準備銷毀”的對象的銷毀方法的對象的銷毀方法(析構函數(shù))。(析構函數(shù))。.垃圾回收器3-2對象銷毀過程發(fā)生后,就將該對象從需要銷毀的對象列表中刪除。因為該對象沒有被引用,也沒有列在銷毀器列表中,所以下次進行垃圾回收時就會將它清除。.垃圾回收器3-3有析構函數(shù)的對象占用的資源較多,因為即使不再需要它們,它們仍會在內存中駐留較長時間。銷毀過程作為獨立的線程執(zhí)行,該線程會占用大量資源。GC.Collect ()強制進行垃圾回收。強制進行垃圾回收。 .方法重載重載方法有兩種方式 指指定不同個數(shù)的參數(shù)定不同個數(shù)的參數(shù) 指定

42、指定不同類型的參數(shù)不同類型的參數(shù).不同參數(shù)個數(shù)的方法重載using System;public class Area private int areaVal; public void AreaCal(int radius) areaVal = (22/7)* radius*radius; public void AreaCal(int length, int breadth) areaVal = length*breadth; public void AreaCal(int length, int breadth, int height) areaVal = length*breadth*he

43、ight; 參數(shù)的類型相同參數(shù)的類型相同參數(shù)個數(shù)不同參數(shù)個數(shù)不同.不同參數(shù)類型的方法重載. public void AreaCal(int radius) areaVal = (22/7)* radius*radius;public void AreaCal(string shapeName) Console.WriteLine(0 的面積沒有計算的面積沒有計算,shapeName);. 方法中參數(shù)個數(shù)相等方法中參數(shù)個數(shù)相等, ,參數(shù)類型不同參數(shù)類型不同.操作符重載3-1 重載操作符意味著使該操作符具有不同的行為 使用操作符可以使方程式簡單易懂/ 第 1 行int result = Decim

44、al.Add(54, 200);/ 第 2 行int result2 = 54 + 200;上述兩行執(zhí)行同樣的操作上述兩行執(zhí)行同樣的操作, ,但操作符更簡便易懂但操作符更簡便易懂.操作符重載3-2以下是可以重載的操作符列表public static public static result-typeresult-type operator operator unary-operatorunary-operator ( ( op-typeop-type operand ) ) public static public static result-typeresult-type operator

45、operator binary-binary-operatoroperator ( ( op-type operand, , op-type2 operand2 ) ) .操作符重載3-3using System;public struct Distance public Distance(int lon, int mag) this.longitude = lon;this.latitude = mag; int longitude, latitude; public static Distance operator - (Distance first, Distance second) r

46、eturn new Distance(first.longitude - second.longitude, first.latitude - second.latitude); / 主函數(shù)主函數(shù) public static void Main() Distance start = new Distance();Distance newDistance = new Distance();Distance finish = new Distance();start.longitude = 12;start.latitude = 10;finish.longitude = 2;finish.lat

47、itude = 1;newDistance = start - finish;Console.WriteLine(終點的位置在起點以東 0 度,以北 1 度。, newDistance.longitude,newDistance.latitude); .C# 中的繼承2-1將新類作為另一個類的后代來聲明和使用避免重復編寫代碼提供代碼重用的巨大好處.C# 中的繼承2-2有兩種繼承類型 單一繼承單一繼承 多重繼承多重繼承 C#只支持單一繼承,不支持多重繼承只支持單一繼承,不支持多重繼承.單一繼承using System;class CharacterVal public int setCharVa

48、l(char ch) char charVal=ch; Console.WriteLine(輸入的字符是輸入的字符是:0,charVal); return(0); class StringVal : CharacterVal public string strVal; public int setStrVal(string str) strVal=str; Console.WriteLine(輸入的字符串是輸入的字符串是:0,strVal); return(0); class Inheritance static void Main() StringVal object1 = new Stri

49、ngVal(); Object1.setCharVal(j); Object1.setStrVal(enjoy); 類類StringVal繼承繼承CharacterVal因此可以直接引用方法因此可以直接引用方法setCharVal.密封類 如果不需要類被繼承則應當密封該類sealed class classOne / 類的實現(xiàn)通過指定通過指定sealed關鍵字,可以密封任何類關鍵字,可以密封任何類.方法重寫2-1重寫基類中現(xiàn)有方法的步驟: 在繼承類中聲明同名的新方法 在該方法名前附加new關鍵字 .方法重寫2-2using System;class IntAddition public voi

50、d add() int firstNum=1; int secondNum=2; Console.WriteLine(兩數(shù)之和是:兩數(shù)之和是:0, firstNum+secondNum); class StringAddition : IntAddition new public void add() string firstStr=a; string secondStr=b; Console.WriteLine(兩字符串之和是兩字符串之和是:0, firstStr+secondStr); class MethodOverride public static void Main() Strin

51、gAddition objStringAddition = new StringAddition(); objStringAddition.add(); 在在StringAddition類中基類中類中基類中add方法被重載方法被重載.總結2-1 帶參數(shù)的構造函數(shù)是接受參數(shù)的構造函數(shù) 在 C# 中,析構函數(shù)由垃圾回收器調用。 在 C#中,有兩種方式來重載方法 指定不同個數(shù)的參數(shù) 指定不同類型的參數(shù) C#允許重載操作符 .總結2-2 重載操作符意味著使操作符(例如,加法操作符 +)在應用于結構或類的某些對象時具有不同的行為 C# 不支持多重繼承 要重寫基類的現(xiàn)有方法,需要在繼承類中聲明一個同名的新

52、方法,并在方法名稱前附加 new 關鍵字.C# 中的高級 OOP 概念第五章第五章.回顧 第四章 - 實現(xiàn)C中的高級OOP概念 帶帶參數(shù)的構造函數(shù)是指接受參數(shù)的構造函參數(shù)的構造函數(shù)是指接受參數(shù)的構造函數(shù)。數(shù)。 在 C#中,析構函數(shù)由垃圾回收器調用。中,析構函數(shù)由垃圾回收器調用。 在在C#中允許方法重載中允許方法重載 在在C#中允許操作符重載中允許操作符重載 C#不支持多重繼續(xù)不支持多重繼續(xù) 要要重寫基類的現(xiàn)有方法,需要在繼承類中重寫基類的現(xiàn)有方法,需要在繼承類中聲明一個同名的新方法,并在方法名稱前聲明一個同名的新方法,并在方法名稱前附加附加 new關鍵字關鍵字 .目標 討論多態(tài)性 使用虛函數(shù)

53、討論抽象基類 討論接口的概念 使用接口.C# 中的多態(tài)性6-1 多態(tài)性和虛函數(shù)關系非常密切 多態(tài)性允許在運行時實現(xiàn)派生類的方法 需要從基類的對象調用派生類方法時,可以使用虛函數(shù)public class ShapeObj public virtual void area() System.Console.WriteLine(這是一個虛這是一個虛 Area 方法方法); .C# 中的多態(tài)性6-2.C# 中的多態(tài)性6-3public class Circle : ShapeObj public override void area() System.Console.WriteLine(這是這是 Ci

54、rcle 的的 Area() 方法方法); public class Rectangle : ShapeObj public override void area() System.Console.WriteLine(這是這是 Rectangle 的的 Area() 方法方法); public class Square : ShapeObj public override void area() System.Console.WriteLine(這是這是 Square 的的 Area() 方法方法); 定義了三個類(定義了三個類(RectangleRectangle、Circle Circle

55、 和和 SquareSquare)。)。這些類是從這些類是從 ShapeObj ShapeObj 類派生的,類派生的,并且重寫了并且重寫了ShapeObj ShapeObj 類的類的 area() area() 方法。方法。override override 關鍵字用于重寫基類函數(shù)關鍵字用于重寫基類函數(shù) area()area()。.C# 中的多態(tài)性6-4public class PolymorphismExp public static void main() ShapeObj objArray = new ShapeObj4; objArray0 = new ShapeObj(); objA

56、rray1 = new Rectangle(); objArray2 = new Circle(); objArray3 = new Square(); foreach (ShapeObj iterateArray in objArray) iterateArray.area(); 每個派生自每個派生自 ShapeObj ShapeObj 的類的的類的 area()area()方法都被方法都被調用調用 .C# 中的多態(tài)性6-5class SecondExp public int firstMethod() return(secondMethod()*thirdMethod(); public

57、virtual int secondMethod() return(10); public int thirdMethod() return(20); class DerivedClass : SecondExp public override int secondMethod() return(30); class TestPublic static void main() DerivedClass objDerived = new DerivedClass();System.Console.WriteLine(objDerived.firstMethod(); 在在DerivedClass

58、DerivedClass中重寫基類中中重寫基類中的虛函數(shù)的虛函數(shù)secondMethod()secondMethod().C# 中的多態(tài)性6-6 多態(tài)性是智能重寫 多態(tài)性 - 在運行時決定調用哪個方法 多態(tài)性需要虛函數(shù),而虛函數(shù)則需要進行方法重寫.抽象基類2-1 抽象基類是可以被繼承的類 不能創(chuàng)建抽象類的對象 C#允許在類定義中添加abstract修飾符來創(chuàng)建抽象基類。 可以有實現(xiàn)的方法.抽象基類2-2using System;abstract class BaseClass public abstract void abstractFunc(); public void nonAbstrac

59、tFunc() Console.WriteLine(這是這是 nonAbractFunc() 方法!方法!); class DerivedClass : BaseClass public override void abstractFunc() Console.WriteLine(這是這是 abstractFunc() 方法!方法!); class Test static void main() DerivedClass objDerived = new DerivedClass(); BaseClass objBase = objDerived; objBase.abstractFunc()

60、; objDerived.nonAbstractFunc(); 在派生類在派生類DerivedClassDerivedClass中重寫抽象基類的抽象中重寫抽象基類的抽象方法方法abstractFunc()abstractFunc().接口4-1 接口相當于純抽象基類 它只能包含抽象方法,而不能包含任何方法實現(xiàn) 實現(xiàn)特定接口的類必須實現(xiàn)該接口列出的成員 只能有方法 屬性 索引的聲明 只能是public internal 方法聲明不能有訪問修飾符.public interface IFile int delFile(); void disFile();.接口4-2public class MyFile : IFi

溫馨提示

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

評論

0/150

提交評論