C#程序設(shè)計(jì)及應(yīng)用教程第4章+面向?qū)ο缶幊袒A(chǔ).ppt_第1頁
C#程序設(shè)計(jì)及應(yīng)用教程第4章+面向?qū)ο缶幊袒A(chǔ).ppt_第2頁
C#程序設(shè)計(jì)及應(yīng)用教程第4章+面向?qū)ο缶幊袒A(chǔ).ppt_第3頁
C#程序設(shè)計(jì)及應(yīng)用教程第4章+面向?qū)ο缶幊袒A(chǔ).ppt_第4頁
C#程序設(shè)計(jì)及應(yīng)用教程第4章+面向?qū)ο缶幊袒A(chǔ).ppt_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第4章 面向?qū)ο蟮木幊袒A(chǔ),4.1 類 4.2 結(jié)構(gòu) 4.3 方法 4.4 屬性與索引器,本章主要解決以下3個(gè)問題,如何定義一個(gè)類?定義后如何使用它的成員? 對象的生存周期,4.1 類,類與對象 類:一組具有相同數(shù)據(jù)結(jié)構(gòu)和相同操作的對象的集合。 例如:汽車 對象(實(shí)例):類的實(shí)例化 。例如:卡車 注意:要使用對象,必須先定義類,然后再創(chuàng)建對象。 對象的生存周期 對象在建立時(shí)分配了內(nèi)存,創(chuàng)建對象實(shí)際上作了兩個(gè)方面的工作: (1)使用new保留字要求系統(tǒng)分配內(nèi)存; (2)使用構(gòu)造函數(shù)初始化數(shù)據(jù)。 銷毀對象也是做了兩個(gè)方面的工作: (1)釋放占用的內(nèi)存; (2)將分配給對象的內(nèi)存歸還給堆(Heap)

2、。,4.1 類的組織,1.類的聲明 用class定義類,聲明類的形式為: 附加聲明 訪問修飾符 class 類名稱:基類 ,接口序列 字段聲明 構(gòu)造函數(shù) 方法 事件 ,注意:中的內(nèi)容可省或任選其一,當(dāng)兩者都有時(shí),先基類后接口,任何類都可以定義數(shù)據(jù)成員和函數(shù)成員,任何類要么包含這兩類成員,要么只包含兩者之一。,4.1 類的組織(續(xù)),public class Child private int age; private string name; / 不帶參數(shù)的構(gòu)造函數(shù) public Child() name = none; / 帶參數(shù)的構(gòu)造函數(shù) public Child(string name,

3、 int age) ,如果不指明,則 默認(rèn)為private,4.1 類的組織(續(xù)), = name; this.age = age; / 輸出方法 public void PrintChild() Console.WriteLine(0, 1 years old., name, age); public class Program ,4.1 類的組織(續(xù)),public static void Main() /使用new關(guān)鍵字創(chuàng)建對象,new后是調(diào)用的構(gòu)造函數(shù) Child child1 = new Child(Zhang San, 11); Child child2 = ne

4、w Child(Li Si, 10); Child child3 = new Child(); / 顯示結(jié)果 Console.Write(Child #1: ); child1.PrintChild(); Console.Write(Child #2: ); child2.PrintChild(); Console.Write(Child #3: ); child3.PrintChild();,4.1 類的組織(續(xù)),Console.ReadLine(); 輸出結(jié)果: Child #1: Zhang San, 11 years old. Child #2: Li Si, 10 years ol

5、d. Child #3: none, 0 years old.,4.1.2 構(gòu)造函數(shù),作用:構(gòu)造函數(shù)是一個(gè)特殊的方法,用于在建立對象時(shí) 進(jìn)行初始化的動作。 好處:確保每一個(gè)對象在被使用之前都適當(dāng)?shù)剡M(jìn)行了初始化的動作。 構(gòu)造函數(shù)特點(diǎn): 1) 每個(gè)類至少有一個(gè)構(gòu)造函數(shù)。若程序代碼中沒有構(gòu)造函數(shù)則系統(tǒng)會自動提供一個(gè)默認(rèn)的構(gòu)造函數(shù)。 2) 一個(gè)構(gòu)造函數(shù)總是和它的類名相同。 3) 構(gòu)造函數(shù)不包含任何返回值。 4) 構(gòu)造函數(shù)總是public的。 一般在構(gòu)造函數(shù)中作初始化工作,對于執(zhí)行過程用時(shí)比較長的程序代碼,最好不要放在構(gòu)造函數(shù)中。,4.1.2 構(gòu)造函數(shù)(續(xù)),1、默認(rèn)構(gòu)造函數(shù) (1)如果在類中不定義構(gòu)造

6、函數(shù),系統(tǒng)會提供一個(gè)默認(rèn)的構(gòu)造函數(shù)。 (2)默認(rèn)構(gòu)造函數(shù)沒有參數(shù)。 (3)默認(rèn)構(gòu)造函數(shù)自動將非靜態(tài)成員初始化為: 數(shù)值型:如int、double等,初始化為0。 bool類型:初始化為false. 引用類型:初始化為null。 (4)如果自己定義了類的構(gòu)造函數(shù),則所有初始化工作由編程者自己完成。,4.1.2 構(gòu)造函數(shù)(續(xù)),2. 重載構(gòu)造函數(shù) 有時(shí)候可能會遇到這樣的情況:在一個(gè)類中的多個(gè)方法中都要用到某一個(gè)數(shù)據(jù)成員,而該成員值必須從其他類中傳遞過來。這時(shí),無參數(shù)的構(gòu)造函數(shù)就不能勝任了,解決這個(gè)問題最好的辦法就是:重載(Overloading)構(gòu)造函數(shù)。,4.1.2 構(gòu)造函數(shù)(續(xù)),using

7、System; using System.Collections.Generic; using System.Text; namespace OverloadingExample class Program public Program() Console.WriteLine(null); ,4.1.2 構(gòu)造函數(shù)(續(xù)),public Program(string str) Console.WriteLine(str); static void Main() Program aa = new Program(); Program bb = new Program(How are you!); C

8、onsole.ReadLine(); ,4.1.3 字段和局部變量,字段:指聲明為類一級的對象或值類型的變量。 局部變量:指在方法、事件以及構(gòu)造函數(shù)內(nèi)聲明的變量。 public class Program public static int j=20; /字段 public static void Main() int j=30; /局部變量 Console.WriteLine(j); /輸出結(jié)果:30 Console.WriteLine(Program.j); /輸出結(jié)果:20 Console.ReadLine(); ,4.1.3 字段和局部變量,當(dāng)字段和局部變量名相同時(shí),如果要引用靜態(tài)字段

9、,可以使用下面的形式: 類名.字段名 如果是實(shí)例字段,則使用下面的形式: this.字段名 這里的this指當(dāng)前實(shí)例。 當(dāng)然,如果沒有出現(xiàn)字段和局部變量名重名的情況,引用字段的形式和引用局部變量的形式相同。,4.1.4 靜態(tài)成員與實(shí)例成員,類的成員包括字段、屬性、構(gòu)造函數(shù)、方法、事件、索引、嵌套類。 類的成員分靜態(tài)成員和實(shí)例成員 靜態(tài)成員在內(nèi)存中只有一份 靜態(tài)成員要等到應(yīng)用程序結(jié)束時(shí)才會退出內(nèi)存。 把只有創(chuàng)建了類的實(shí)例才能夠使用的成員叫實(shí)例成員。,4.1.5 訪問修飾符,C#中有以下成員訪問修飾符: Public (常用)任何外部的類都可以不受限制的存取這個(gè)類的方法和數(shù)據(jù)成員。 private

10、 (常用)類中的所有方法和數(shù)據(jù)成員只能在此類中使用,外部無法存取。(默認(rèn)) Protected 除了讓本身的類可以使用之外,任何繼承自此類的子類都可以存取。 Internal 在當(dāng)前項(xiàng)目中都可以存取。該訪問權(quán)限一般用于基于組件的開發(fā),因?yàn)樗梢允菇M件以私有方式工作,而該項(xiàng)目外的其它代碼無法訪問。 Protected internal 只限于當(dāng)前項(xiàng)目,或者從該項(xiàng)目的類繼承的類才可以存取。 Partial 局部類型,類的定義和實(shí)現(xiàn)可以分布在多個(gè)文件中,但都要使用partial標(biāo)注,基類只需要聲明一次,若多次聲明則必須完全一致。,4.2 結(jié)構(gòu),結(jié)構(gòu)(struct)是由一系列相關(guān)的、但類型不一定相同的

11、變量組織在一起而構(gòu)成的數(shù)據(jù)表示形式,所有結(jié)構(gòu)類型都隱式地從類型object繼承。 例如:public struct Point public int x; public int y; 結(jié)構(gòu)和類的區(qū)別與聯(lián)系: 結(jié)構(gòu)類型是值類型,類類型是引用類型。 凡是定義為結(jié)構(gòu)的,都可以用類來定義。 創(chuàng)建輕量級對象時(shí),可以使用結(jié)構(gòu)。,4.3 方法,方法(Method)是一組程序代碼的集合,每個(gè)方法都有一個(gè)方法名,便于識別和讓其他方法調(diào)用。 1. 方法的定義與使用 (1)方法必須放在某個(gè)類中。 (2)定義方法的語法形式為: 訪問修飾符 返回值類型 方法名稱(參數(shù)序列) 語句序列 ,4.3 方法(續(xù)),定義方法時(shí),

12、需要注意以下幾點(diǎn): 方法名不能和變量、常數(shù)或者任何聲明在類中其它的成員相同。 方法可以有參數(shù),也可以沒有參數(shù),但是不論是否有參數(shù),小括號都是必需的。如果參數(shù)序列中的參數(shù)有多個(gè),則以逗號分開。 結(jié)束某個(gè)方法的執(zhí)行,可以使用return語句,程序遇到return語句后,會將執(zhí)行流程交還給調(diào)用此方法的程序代碼段。此外,還可以用return語句返回一個(gè)值。 如果聲明一個(gè)非void類型的方法,則方法中必須至少有一個(gè)return語句。,4.3 方法(續(xù)),using System; class Program public int MyMethod() Console.WriteLine(this is

13、MyMethod.); int i = 10; return i; static void Main() Program method = new Program(); int j = 5; j = method.MyMethod(); Console.WriteLine(the value is 0., j); ,4.3 方法,2. 方法中的參數(shù)傳遞 1) 傳遞值類型的參數(shù) 值類型參數(shù)的格式為: 參數(shù)類型 參數(shù)名 class Program public static void AddOne(int a)a+; static void Main() int a = 3; Console.Wr

14、iteLine(調(diào)用AddOne之前,a=0, a); AddOne(a); Console.WriteLine(調(diào)用AddOne之后,a=0, a); Console.ReadLine(); ,4.3 方法(續(xù)),2) 傳遞引用類型的參數(shù) 引用類型參數(shù)的格式為: ref 參數(shù)類型 參數(shù) class Program public static void AddOne(ref int a)a+; static void Main() int a = 3; Console.WriteLine(調(diào)用AddOne之前,a=0, a); AddOne(ref a); Console.WriteLine(

15、調(diào)用AddOne之后,a=0, a); Console.ReadLine(); ,4.3 方法(續(xù)),3) 輸出多個(gè)引用類型的參數(shù) 輸出引用類型參數(shù)的格式為: out 參數(shù)類型 參數(shù)名 class Program public static void MyMethod(out int a, out int b) a = 5; b = 6; static void Main() int x, y; MyMethod(out x, out y); Console.WriteLine(調(diào)用MyMethod之后,x=0,y=1, x, y); Console.ReadLine(); ,4.3 方法(續(xù)

16、),4) 傳遞個(gè)數(shù)不確定的參數(shù) 需要傳遞的參數(shù)個(gè)數(shù)不確定時(shí),可以采用params關(guān)鍵字,其后一般跟一個(gè)數(shù)組。 class Program public static float Average(params long v) long total, i; for (i = 0, total = 0; i v.Length; +i) total += vi; return (float)total / v.Length; ,4.3 方法(續(xù)),static void Main() float x = Average(1, 2, 3, 5); Console.WriteLine(1、2、3、5的平均

17、值為0, x); x = Average(4, 5, 6, 7, 8); Console.WriteLine(4、5、6、7、8的平均值為0, x); Console.ReadLine(); ,4.3 方法(續(xù)),3. 方法重載 方法重載是指具有相同的方法名,但參數(shù)類型或參數(shù)個(gè)數(shù) 不完全相同的多個(gè)方法可以同時(shí)出現(xiàn)在一個(gè)類中。 using System; class Program public static int Add(int i, int j) return i + j; public static string Add(string s1, string s2) return s1 +

18、 s2; public static long Add(long x) return x + 5;,4.3 方法(續(xù)),static void Main() Console.WriteLine(Add(1, 2); Console.WriteLine(Add(1, 2); Console.WriteLine(Add(10); /按回車鍵結(jié)束 Console.ReadLine(); ,4.4 屬性與索引器,屬性的作用:可以限制外部對類中成員變量的存取權(quán)限。 1.屬性的聲明和定義 get:用來讀取數(shù)據(jù)成員的值。 set:用來設(shè)置數(shù)據(jù)成員的值。 public class MyClass private int number = 0; public int MyNumber getreturn number; setif (value 0) number = value; /value是關(guān)鍵字,其值由編譯器自動生成。 ,4.4.1 屬性(續(xù)),public class Program public static void Main() MyClass me = new

溫馨提示

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

評論

0/150

提交評論