版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第一章:概述第二章:C# 語言的基本原理第三章:C# 中對象的創(chuàng)建第四章:面向?qū)ο蟮木幊碳夹g(shù)第五章:C# 編程第六章:編寫基于 .NET 的應用 程序第七章:使用 ADO.NET 訪問 數(shù)據(jù),第八章:創(chuàng)建基于 Windows 的應用程序第九章:在 C# 應用程序中使 用 XML Web Service第十章:創(chuàng)建 Web
2、 應用程序十一章:應用程序設(shè)置和 部署十二章:進階學習目標,C#程序設(shè)計語言課程內(nèi)容,,C#中對象的創(chuàng)建,內(nèi)容:,類的定義 聲明方法 構(gòu)造函數(shù) 使用類的靜態(tài)成員,C#,學習完本節(jié)后,你將能夠:定義類創(chuàng)建對象 使用訪問修飾符定義類成員的作用域使用命名空間來組織類,類 的 定義 3.1,萬物皆對象世間萬物皆為對象,狗、建筑、汽車…
3、…對象都具有狀態(tài)和行為對象都有類型任何對象都是某個類的實例,是屬于某個類的對象阿土仔 ------〉人類每個對象都利用別的對象來組建自己。 汽車 = 發(fā)動機 + 輪胎 + 方向盤 + 剎車 + ……一只蛤蟆一張嘴,兩只眼睛四條腿 換言之,你通過將已有的對象打成一個包,來創(chuàng)建新的對象。由此,你可以將程序的復雜性,隱藏在對象的簡單性之下,類 和 對 象 3.1.1,類 和 對 象
4、 3.1.1,類是對象的模板,它定義了對象的公共屬性和行為(方法)。屬性和方法共同稱作類的成員對象是類的實例,是具體的對象必須使用 new 進行實例化才可以使用,類 和 對 象 3.1.1,,類 對象人類 (模板) 阿土仔(具體化)姓名 姓名 = 阿土仔性別
5、 性別 = 男使用卡片( ) 使用“陷害卡”使用道具( ) 使用“飛彈”,,,,,屬性,方法,類 和 對 象 3.1.1,類:相對對象而言,類似于模板或藍圖包含方法和數(shù)據(jù),對象:是類的實例使用關(guān)鍵字 new 創(chuàng)建對象具有狀態(tài)和行為,對象,,類,定義類和創(chuàng)建對象 3.1.3,類是對象的模板,使
6、用對象前必須先創(chuàng)建類語法:,[訪問修飾符] class 類名 { 字段; //描述對象的狀態(tài) 方法; //實現(xiàn)對象的行為 構(gòu)造函數(shù); //初始化對象},定義類的字段 3.1.3,字段是用來描述一個類的對象的狀態(tài)和特征的,如人的名字、性別、年齡等語法:示例:,[訪
7、問修飾符] 數(shù)據(jù)類型 字段名 [= 缺省值],class People{ public string name; //姓名字段 public string sex; //性別字段 …},定義類的方法 3.1.3,方法是一組指令集合,用來實現(xiàn)一個類的對象的行為,如人會“使用工具”,獅子會“咬人”語法:,[訪問修飾符] 返回值類型 方法名
8、(參數(shù)) { 指令集合; //方法體 }注意:有關(guān)方法的詳細介紹,將在下一節(jié)給出,定義類的構(gòu)造函數(shù) 3.1.3,構(gòu)造函數(shù)是一個特殊的方法,用來在創(chuàng)建對象時完成對象的初始化工作語法:,[訪問修飾符] 類名 (參數(shù)) { 指令集合; //方法體 }注意:有關(guān)構(gòu)造函數(shù)的詳細介紹,將在下一節(jié)給出,定義類和創(chuàng)建對象
9、 3.1.3,示例: 一個簡單的類,只包含了幾個字段,class People{ public string name; public string sex;},創(chuàng) 建 對 象 3.1.3,對象是類的實例,是具體的。要使用對象,必須使用關(guān)鍵字new 實例化類的一個對象語法:示例:, = new ,People ob
10、ject1 = new People();,使 用 對 象 3.1.3,實例化一個對象之后,就可以訪問和使用對象的字段和方法了(成員)。使用點取符.來訪問成員示例:,People object1 = new People();object1.name = “阿土仔”;object1.sex = “男”;……,,C#中對象的創(chuàng)建,內(nèi)容:,類的定義 聲明方法
11、 構(gòu)造函數(shù) 使用類的靜態(tài)成員,C#,聲 明 方 法 3.2,學習完本章后,你將能夠:編寫方法給方法傳遞參數(shù)使用 ref 引用參數(shù)使用 out 輸出參數(shù)重載方法,如何編寫方法 3.2.1,語法:,[訪問修飾符] 返回值類型 方法名 (參數(shù)) { 指令集合; //方法體 },如何編寫方法
12、 3.2.1,返回值是指當方法執(zhí)行結(jié)束時,方法返回結(jié)果的數(shù)據(jù)類型。例如:對2個整數(shù)進行求和的方法,其返回值類型就是整形如果方法沒有返回值,使用void關(guān)鍵字參數(shù)是可選的,表示傳遞給方法中要處理的數(shù)據(jù),例如:對2個整數(shù)進行求和的方法,就需要2個整形的參數(shù)參數(shù)的聲明方法和變量一樣,如果有多個參數(shù),參數(shù)之間用,分開,如何編寫方法 3.2.1,示例
13、: 給類增加方法,class People{ public string name; public string sex;//可以使用道具加害于人,此方法需要2個參數(shù),即道具和被加害人 public void useTool(string tool, People o) { Console.WriteLine(“將{0}用于{1}”,tool, o.name); }},如何使用方法,示例: 方法
14、也是類的成員,同樣使用點取符.來訪問和使用,People object1 = new People();object1.name = “阿土仔”;object1.sex = “男”;People object2 = new People();object2.name = “孫小美”;object2.sex = “女”;//阿土仔投一顆飛彈給孫小美object1.useTool(“飛彈”, object2);//孫
15、小美還阿土仔一枚臭彈object2.useTool(“臭彈”, object1);,給方法傳遞參數(shù) 3.2.2,當調(diào)用方法時,傳遞參數(shù)的個數(shù)、數(shù)據(jù)類型、順序必須與方法簽名一致方法名+方法的參數(shù)列表合稱為方法簽名,,class SimpleMath { public int Add(int x, int y){ return x+y; }}//調(diào)用方法時需要傳遞參數(shù)Si
16、mpleMath sums = new SimpleMath();int total = sums.Add(20,30);,定義類和創(chuàng)建對象,練 習,參閱教材p69頁課堂練習3.1.6,方法重載 3.2.5,,在同一個類中可以定義多個方法,它們享有相同的名字,但是方法的參數(shù)不同,或者參數(shù)類型不同,或者參數(shù)個數(shù)不同,這就叫方法重載只有返回值類型不同,不是方法重載,會產(chǎn)生編譯時錯誤方法被調(diào)用時
17、,系統(tǒng)會根據(jù)你提供的參數(shù)類型或參數(shù)個數(shù),幫你從多個方法中選擇正確的那個構(gòu)造方法也可以重載,思考題:為什么使用方法重載?你負責編寫一段打印程序,要打印的數(shù)據(jù)包括整型、浮點型、字符串類型、日期類型等等,且不同數(shù)據(jù)類型打印方法也不相同,怎么辦?解決辦法:只好為每一種數(shù)據(jù)類型編寫一個單獨的打印方法了printInt()printFloat()printString()printDate(),?,方法重載
18、 3.2.5,思考題:為什么使用方法重載呢?更好的解決辦法:使用一個公共的方法名print( ),然后通過方法重載實現(xiàn)不同數(shù)據(jù)類型的打印print ( int i )print ( float f )print ( String s )print ( Date d )所有功能相似的方法共享同一個名字,更容易記憶,?,方法重載 3.2.5,示例: 重新編寫useT
19、ool方法,如果指定了被加害人,則將道具應用于這 一個人;否則將道具應用于所有人,方法重載 3.2.5,class People{//將道具應用于指定的人 public void useTool(string tool, People o){ Console.WriteLine(“將{0}用于{1}”,tool, o.name); }//將道具應用于所有人
20、 public void useTool(string tool){ Console.WriteLine(“將{0}用于所有人”,tool); }},當輸入三個/// 后,VS.NET 就會插入幾行 XML 代碼,可以為成員添加描述信息在代碼編輯器 中,當在對象名后面輸入“.” 操作符后,VS .NET 會顯示對象的成員列表,使用 XML代碼注釋功能 3.2.6,編寫和調(diào)用方法
21、 3.2.7,練 習,參見教材P81頁3.2.7 課堂練習,,C#中對象的創(chuàng)建,內(nèi)容:,類的定義 聲明方法 構(gòu)造函數(shù) 使用類的靜態(tài)成員,C#,構(gòu)造函數(shù) 3.3,構(gòu)造函數(shù)是一個很特殊的方法(因為沒有返回值)。每個類都顯示或隱式的包涵一個構(gòu)造方法,用來初始化該類的一個新的對象構(gòu)造函數(shù)和類具有相同的名稱,且沒有返回值。構(gòu)造函數(shù)負責:為對象分
22、配內(nèi)存空間成員變量的初始化示例:,class People { public string name; public string sex;//構(gòu)造函數(shù) public People(){ sex = “男”; } },如何初始化對象 3.3.1,當使用new創(chuàng)建一個新的對象時,CLR會自動調(diào)用構(gòu)造函數(shù)。示例:,class People { pub
23、lic string name; public string sex;//構(gòu)造函數(shù) public People() { sex = “男”; } } People obj = new People();,,,,如何初始化對象 3.3.1,如果沒有編寫構(gòu)造函數(shù),C#會自動提供一個缺省的無參的構(gòu)造參數(shù)示例:,class People { public st
24、ring name; }等價于: class People { public string name; public People() { } },帶參數(shù)的構(gòu)造函數(shù) 3.3.1,同其他方法一樣,構(gòu)造函數(shù)可以帶參數(shù)一旦我們定義了構(gòu)造函數(shù),C#就不再提供缺省構(gòu)造函數(shù)示例:,class People { public string name;//帶參數(shù)的構(gòu)造函數(shù) p
25、ublic People(string s) { name = s; } }People obj = new People(“阿土仔”);People obj = new People(); //編譯錯誤!,重載構(gòu)造函數(shù) 3.3.2,構(gòu)造函數(shù)也可以重載,這樣就能夠以多種方式創(chuàng)建對象示例:,class People { public string name;
26、//無參的構(gòu)造函數(shù) public People( ) { sex = “男”; }//帶參數(shù)的構(gòu)造函數(shù) public People(string s) { name = s; } }People obj1 = new People(“阿土仔”);People obj2 = new People();,使用初始化列表 3.3.2,思考題:
27、 為什么使用初始化列表,class People { public string name; public int age; public People( ) //構(gòu)造函數(shù)0 { name = “unknow”; age = 0; } public People(string sname) //構(gòu)造函數(shù)1 { name = sname; age = 0; } publ
28、ic People(string sname,int theAge) //構(gòu)造函數(shù)2 { name = sname; age = theAge; } },?,使用初始化列表 3.3.2,多個重載的構(gòu)造函數(shù)常常很相似,大量重復代碼將公共代碼集中于一個構(gòu)造函數(shù)中,由構(gòu)造函數(shù)調(diào)用示例:,class People { public string name; publi
29、c int age; public People( ):this(“unknow”,0) //構(gòu)造函數(shù)0 { } public People(string sname):this(sname,0) //構(gòu)造函數(shù)1 { } public People(string sname,int theAge) //構(gòu)造函數(shù)2 { name = sname; age = theAge;
30、 } },this 關(guān)鍵字,this是一個特殊的引用(指針),它指向的是“自己”,也就是當前對象this的作用:點取成員區(qū)分同名變量將當前對象(自己)作為參數(shù),傳遞給其他對象的方法作為方法名表示構(gòu)造方法,this 關(guān)鍵字,class People { public string name; public int age; public People(string name, int
31、 age){ name = name ; this.name = name; this.age = age;},示例: 使用this 區(qū)分同名變量,使用構(gòu)造函數(shù) 3.3.3,練 習,參見教材P86頁3.3.3 課堂練習,,C#中對象的創(chuàng)建,內(nèi)容:,類的定義 聲明方法 構(gòu)造函數(shù) 使用類的靜態(tài)成員,C#,使用類的靜態(tài)成員
32、 3.4,類可以具有靜態(tài)的成員,如靜態(tài)字段、靜態(tài)方法使用 static 關(guān)鍵字修飾靜態(tài)成員相當于“全局”的,不依賴于某一個具體的對象,類的靜態(tài)字段 3.4.1,static 修飾類的字段時,在一個類中只開辟一塊內(nèi)存空間存儲,并在類的所有對象實例間共享,因此static 變量也稱為類變量,class Cat { string name ; static
33、 string food; },,,,,1name,2name,3name,4name,food,類的靜態(tài)字段 3.4.1,static變量不依賴于具體對象,因此直接通過類名訪問,而不是通過類的對象實例訪問的非靜態(tài)變量必須首先實例化類的一個對象,再通過對象訪問,因此也稱為實例變量,class Cat { string name ; static string food
34、; },static void Main(){ Cat.food = “fish”; //OK Cat.name = “Kitty”; //錯誤 Cat cat1 = new Cat(); cat1.name = “Kitty”; //OK},類的靜態(tài)字段 3.4.1,static變量類似于C語言的全局變量由于在所有的對象間共享,因此可以用于對象之間的通信
35、 思考題:怎樣統(tǒng)計被創(chuàng)建的Cat對象的總數(shù)?,class Cat { public static int count; public string name ; public Cat(){ count++; }},?,,,,,1cat1,2cat2,3cat3,4cat4,count = 4,類的靜態(tài)方法 3.4.1,static修飾的方法
36、稱為靜態(tài)方法,是一個類的全局方法靜態(tài)方法也叫作類方法,類名.方法名 沒有static修飾的方法叫實例方法,對象名.方法名注意事項:static方法中不能直接使用非靜態(tài)成員,因為非靜態(tài)成員與實例相關(guān),但可以通過對象點取間接使用static方法中不能使用this(與實例相關(guān))非static方法中可以使用靜態(tài)成員,使用類的靜態(tài)成員 3.4.3,練 習,參見教材P91頁3.4.3 課堂練習,使用
37、命名空間組織類 3.1.4,.NET框架類庫提供了幾百個類供程序員使用,程序員也可以創(chuàng)建自己的類如此眾多的類該如何管理呢?就如同硬盤上的文件需要文件夾來組織,也可以將功能相似或相關(guān)的類組織到一起,這就是命名空間namespace如果有多個類重名(不同的程序員開發(fā)),可以將類組織到不同的命名空間,以避免命名沖突,使用命名空間組織類 3.1.4,如同硬盤上的文件夾可以包含子文件夾一樣,
38、一個命名空間可以再包含命名空間,形成嵌套層次硬盤上文件夾間層次用\表示,命名空間的層次用.表示 c:\windows\system32\index.html NameSpace.subNameSpace.Class 如:System . IO . File namespace namespace class,,,,使用命名空間組織類 3.1.4,創(chuàng)建命名空間嵌套的命名
39、空間,namespace Microsoft {class People () { }},namespace Microsoft {namespace Sales {public class People () { }}}// 或者namespace Microsoft.Sales { ... },使用命名空間組織類 3.1.4,使用完全限定的名字使用using 指定類所在的
40、命名空間,People obj = new People(); //錯誤!Microsoft.Sales.People obj = new Microsoft.Sales.People(); //OK,using System;using Microsoft.Sales;People obj = new People() //OK,在 .NET 框架類庫中的類是通過一個命名空間層次結(jié)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論