版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第4章 面向?qū)ο蟮木幊袒A(chǔ),4.1 類 4.2 結(jié)構(gòu) 4.3 方法 4.4 屬性與索引器,4.1 類,類與對象 類:一組具有相同數(shù)據(jù)結(jié)構(gòu)和相同操作的對象的集合。 例如:汽車 對象(實例):類的實例化 。例如:卡車 注意:要使用對象,必須先定義類,然后再創(chuàng)建對象。 對象的生存周期 對象在建立時分配了內(nèi)存,創(chuàng)建對象實際上作了兩個方面的工作: (1)使用new保留字要求系統(tǒng)分配內(nèi)存; (2)使用構(gòu)造函數(shù)初始化數(shù)據(jù)。 銷毀對象也是做了兩個方面的工作: (1)釋放占用的內(nèi)存; (2)將分配給對象的內(nèi)存歸還給堆(Heap)。,4.1 類的組織,1.類的聲明 用class定義類,聲明類的形式為: 附加聲明
2、訪問修飾符 class 類名稱:基類 ,接口序列 字段聲明 構(gòu)造函數(shù) 方法 事件 ,注意:中的內(nèi)容可省或任選其一,當(dāng)兩者都有時,先基類后接口,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, int age) ,如果不指明,則 默認(rèn)為private,4.1 類的組織(續(xù)), = name; this.age = age; / 輸出方法 p
3、ublic 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 = new Child(Li Si, 10); Child child3 = new Child(); / 顯示結(jié)果 Console.Write(Child #1: ); ch
4、ild1.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 old. Child #3: none, 0 years old.,4.1.2 構(gòu)造函數(shù),作用:構(gòu)造函數(shù)是一個特殊的方法,用于在建立對象時 進(jìn)行初始化的動作。 好處:確保每
5、一個對象在被使用之前都適當(dāng)?shù)剡M(jìn)行了初始化的動作。 構(gòu)造函數(shù)特點: 1) 每個類至少有一個構(gòu)造函數(shù)。若程序代碼中沒有構(gòu)造函數(shù)則系統(tǒng)會自動提供一個默認(rèn)的構(gòu)造函數(shù)。 2) 一個構(gòu)造函數(shù)總是和它的類名相同。 3) 構(gòu)造函數(shù)不包含任何返回值。 4) 構(gòu)造函數(shù)總是public的。 一般在構(gòu)造函數(shù)中作初始化工作,對于執(zhí)行過程用時比較長的程序代碼,最好不要放在構(gòu)造函數(shù)中。,4.1.2 構(gòu)造函數(shù)(續(xù)),1、默認(rèn)構(gòu)造函數(shù) (1)如果在類中不定義構(gòu)造函數(shù),系統(tǒng)會提供一個默認(rèn)的構(gòu)造函數(shù)。 (2)默認(rèn)構(gòu)造函數(shù)沒有參數(shù)。 (3)默認(rèn)構(gòu)造函數(shù)自動將非靜態(tài)成員初始化為: 數(shù)值型:如int、double等,初始化為0。 boo
6、l類型:初始化為false. 引用類型:初始化為null。 (4)如果自己定義了類的構(gòu)造函數(shù),則所有初始化工作由編程者自己完成。,4.1.2 構(gòu)造函數(shù)(續(xù)),2. 重載構(gòu)造函數(shù) 有時候可能會遇到這樣的情況:在一個類中的多個方法中都要用到某一個數(shù)據(jù)成員,而該成員值必須從其他類中傳遞過來。這時,無參數(shù)的構(gòu)造函數(shù)就不能勝任了,解決這個問題最好的辦法就是:重載(Overloading)構(gòu)造函數(shù)。,4.1.2 構(gòu)造函數(shù)(續(xù)),using System; using System.Collections.Generic; using System.Text; namespace OverloadingEx
7、ample 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!); Console.ReadLine(); ,4.1.3 字段和局部變量,字段:指聲明為類一級的對象或值類型的變量。 局部變量:指在方法、事件以及構(gòu)造函數(shù)內(nèi)聲明的變量。 pu
8、blic 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)字段和局部變量名相同時,如果要引用靜態(tài)字段,可以使用下面的形式: 類名.字段名 如果是實例字段,則使用下面的形式: this.字段名 這里的this指當(dāng)前實例。 當(dāng)然,如果沒有出現(xiàn)字段和局部變量名重名的情況,引
9、用字段的形式和引用局部變量的形式相同。,4.1.4 靜態(tài)成員與實例成員,類的成員包括字段、屬性、構(gòu)造函數(shù)、方法、事件、索引、嵌套類。 類的成員分靜態(tài)成員和實例成員 靜態(tài)成員在內(nèi)存中只有一份 靜態(tài)成員要等到應(yīng)用程序結(jié)束時才會退出內(nèi)存。 把只有創(chuàng)建了類的實例才能夠使用的成員叫實例成員。,4.1.5 訪問修飾符,C#中有以下成員訪問修飾符: Public (常用)任何外部的類都可以不受限制的存取這個類的方法和數(shù)據(jù)成員。 private (常用)類中的所有方法和數(shù)據(jù)成員只能在此類中使用,外部無法存取。(默認(rèn)) Protected 除了讓本身的類可以使用之外,任何繼承自此類的子類都可以存取。 Inter
10、nal 在當(dāng)前項目中都可以存取。該訪問權(quán)限一般用于基于組件的開發(fā),因為它可以使組件以私有方式工作,而該項目外的其它代碼無法訪問。 Protected internal 只限于當(dāng)前項目,或者從該項目的類繼承的類才可以存取。 Partial 局部類型,類的定義和實現(xiàn)可以分布在多個文件中,但都要使用partial標(biāo)注,基類只需要聲明一次,若多次聲明則必須完全一致。,4.2 結(jié)構(gòu),結(jié)構(gòu)(struct)是由一系列相關(guān)的、但類型不一定相同的變量組織在一起而構(gòu)成的數(shù)據(jù)表示形式,所有結(jié)構(gòu)類型都隱式地從類型object繼承。 例如:public struct Point public int x; public
11、 int y; public string s; 結(jié)構(gòu)和類的區(qū)別與聯(lián)系: 結(jié)構(gòu)類型是值類型,類類型是引用類型。 凡是定義為結(jié)構(gòu)的,都可以用類來定義。 創(chuàng)建輕量級對象時,可以使用結(jié)構(gòu)。,4.3 方法,方法(Method)是一組程序代碼的集合,每個方法都有一個方法名,便于識別和讓其他方法調(diào)用。 1. 方法的定義與使用 (1)方法必須放在某個類中。 (2)定義方法的語法形式為: 訪問修飾符 返回值類型 方法名稱(參數(shù)序列) 語句序列 ,4.3 方法(續(xù)),定義方法時,需要注意以下幾點: 方法名不能和變量、常數(shù)或者任何聲明在類中其它的成員相同。 方法可以有參數(shù),也可以沒有參數(shù),但是不論是否有參數(shù),小括
12、號都是必需的。如果參數(shù)序列中的參數(shù)有多個,則以逗號分開。 結(jié)束某個方法的執(zhí)行,可以使用return語句,程序遇到return語句后,會將執(zhí)行流程交還給調(diào)用此方法的程序代碼段。此外,還可以用return語句返回一個值。 如果聲明一個非void類型的方法,則方法中必須至少有一個return語句。,4.3 方法(續(xù)),using System; class Program public int MyMethod() Console.WriteLine(this is MyMethod.); int i = 10; return i; static void Main() Program method
13、 = 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.WriteLine(調(diào)用AddOne之前,a=0, a); AddOne(a); Console.WriteLine(調(diào)用AddOne之后
14、,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(調(diào)用AddOne之后,a=0, a); Console.ReadLine(); ,4.3 方法(續(xù)),3) 輸出多個引用類型的參數(shù) 輸
15、出引用類型參數(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(); ,Ref參數(shù)傳遞與Out參數(shù)傳遞異同點,相同點: 都是傳遞引用類型的參數(shù),編譯器處理時沒有區(qū)別 不同點: Ref參數(shù)使用前必須要初始化 Out參數(shù)使用前
16、不必初始化 注意: public void AddOne(ref int x) public void AddOne(out int x) 上面這兩個方法,不是重載方法。,4.3 方法(續(xù)),4) 傳遞個數(shù)不確定的參數(shù) 需要傳遞的參數(shù)個數(shù)不確定時,可以采用params關(guān)鍵字,其后一般跟一個數(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
17、.Length; ,4.3 方法(續(xù)),static void Main() float x = Average(1, 2, 3, 5); Console.WriteLine(1、2、3、5的平均值為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ù)個數(shù) 不完全相同的多個方法可以同時出現(xiàn)在一個類中。 using System; class Program public sta
18、tic int Add(int i, int j) return i + j; public static string Add(string s1, string s2) return s1 + 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 屬性與索引
19、器,屬性的作用:可以限制外部對類中成員變量的存取權(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 MyClass(); Con
20、sole.WriteLine(me.MyNumber); me.MyNumber = 5; Console.WriteLine(me.MyNumber); Console.ReadLine(); ,/MyClass.cs using System; namespace ConsoleTest class MyClass private int number; public int Number get return number; set if (value 0) number = value; ,/Program.cs using System; namespace ConsoleTest
21、public class Program public static void Main() MyClass me = new MyClass(); me.Number = -1; Console.WriteLine( Number:0, me.Number); Console.ReadLine(); 回答:Number輸出的值是多少?,4.4.2 索引器,索引器用于封裝內(nèi)部集合或數(shù)組。 索引器在語法上方便了程序員將類、結(jié)構(gòu)或接口作為數(shù)組進(jìn)行訪問。 要聲明類或結(jié)構(gòu)上的索引器,需要使用this關(guān)鍵字。 例如: public int thisint index / 索引器聲明 / get and set accessors ,4.4.2 索引器,【例4-12】索引器的聲明和用法。,本章相關(guān)面試題選擇題,1.以下關(guān)于ref和out的描述哪些項是正確的?(多選) A.使用ref參數(shù),傳遞到ref參數(shù)的參數(shù)必須最先初始化。 B.使用out參數(shù),傳遞到out參數(shù)的參數(shù)必須最先初始化。 C.使用ref參數(shù),必須將參數(shù)作為ref參數(shù)顯式傳遞到方法。 D.使用out參數(shù),必須將參數(shù)作為out參數(shù)顯式傳遞到方法。 A
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 未來五年交流傳動內(nèi)燃機(jī)車企業(yè)縣域市場拓展與下沉戰(zhàn)略分析研究報告
- 未來五年新形勢下凍干精制抗狂犬病血清行業(yè)順勢崛起戰(zhàn)略制定與實施分析研究報告
- 未來五年毛豆企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級戰(zhàn)略分析研究報告
- 未來五年三角帶鼓式硫化機(jī)企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級戰(zhàn)略分析研究報告
- 未來五年生活服務(wù)企業(yè)縣域市場拓展與下沉戰(zhàn)略分析研究報告
- 未來五年蕎麥企業(yè)ESG實踐與創(chuàng)新戰(zhàn)略分析研究報告
- 未來五年醫(yī)藥銷售外包(CSO)行業(yè)市場營銷創(chuàng)新戰(zhàn)略制定與實施分析研究報告
- 2026江西江鎢控股集團(tuán)本部招聘審計專業(yè)管理人員3人備考題庫(含答案詳解)
- 2025東風(fēng)汽車集團(tuán)股份有限公司戰(zhàn)略規(guī)劃部招聘2人備考題庫及答案詳解(考點梳理)
- 2025廣東佛山市順德區(qū)北滘鎮(zhèn)莘村初級中學(xué)招聘臨聘教師備考題庫含答案詳解
- TCEPPC 25-2024 儲能鋰離子電池?zé)崾Э仡A(yù)警及防護(hù)技術(shù)要求
- 宮頸息肉個案護(hù)理
- 資源土豬出售合同協(xié)議
- (高清版)DB50∕T 867.30-2022 安全生產(chǎn)技術(shù)規(guī)范 第30部分:有色金屬鑄造企業(yè)
- 九年級化學(xué)上冊 2.4 元素(2)教學(xué)設(shè)計 (新版)魯教版
- (二調(diào))武漢市2025屆高中畢業(yè)生二月調(diào)研考試 生物試卷(含標(biāo)準(zhǔn)答案)
- 2024-2025學(xué)年天津市和平區(qū)高三上學(xué)期1月期末英語試題(解析版)
- (康德一診)重慶市2025屆高三高三第一次聯(lián)合診斷檢測 地理試卷(含答案詳解)
- 真需求-打開商業(yè)世界的萬能鑰匙
- 傷寒論398條條文
- ISO9001-2015質(zhì)量管理體系版標(biāo)準(zhǔn)
評論
0/150
提交評論