版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 第3章 面向?qū)ο蟮腃#言語唐大仕dstang本章內(nèi)容n類、域、方法n屬性、索引n類的承繼n修飾符n接口n構(gòu)造與枚舉n面向?qū)ο螅撼欣^、封裝、多態(tài)nUML類圖簡介3.1 類、域、方法定義類中的域和方法class Person public string name;public int age;public void sayHello()Console.WriteLine(Hello! My name is + name );public string getInfo()return Name: + name + , Age: + age;構(gòu)造方法 n(1)構(gòu)造方法的方法名與類名一樣。n(2)構(gòu)造
2、方法沒有前往類型,也不能寫void。n(3)構(gòu)造方法的主要作用是完成對象的初始化任務(wù)。n(4)構(gòu)造方法普通不能顯式地直接調(diào)用,而是用new來調(diào)用。缺省構(gòu)造方法 npublic Person() 析構(gòu)方法 nclass Person nn Person() nnn對象的創(chuàng)建nPerson p = new Person(“Liming, 20 ); name p age 對象的運(yùn)用nConsole.WriteLine( );np.sayHello();方法的重載,簽名 public void sayHello()Console.WriteLine(Hello! My name is
3、+ name );public void sayHello( Person another )Console.WriteLine(Hello, + + ! My name is + name );OverloadingTest.cs運(yùn)用this public Person( int age, string name )this.age = age; = name;public Person( ) : this( 0, )/ 構(gòu)造方法的其他語句 ;運(yùn)用例如:銀行系統(tǒng)n系統(tǒng)中有幾類對象?Account, Bank, ATMn每個類中有什么域、方法?注:可
4、在vs中,插入“類關(guān)系圖3.2 屬性、索引 運(yùn)用屬性、索引的例如n運(yùn)用屬性 button1.Text nbutton1.Text = “說他好;n含義相當(dāng)于button1.SetText( “說他好);nString s = button1.Text;n含義相當(dāng)于s = button1.GetText();n運(yùn)用屬性 string s=“abcde;n求出長度: s.Lengthn含義上相當(dāng)于s.GetLength();n運(yùn)用索引 string s=“abcde; n求出第0個字符: s0n含義上相當(dāng)于s.Get(0)private string myName;public string Na
5、meget return myName; set myName = value; 在C#新版中可簡寫為public string Name set; get; 對屬性進(jìn)展訪問 nPerson p = new Person();np.Name = “Li Ming;nConsole.WriteLine( p.Name );n編譯器產(chǎn)生的方法是:nvoid set_Name( string value );nstring get_Name(); PersonProperty.cs屬性與域的比較 n1屬性可以實現(xiàn)只讀或只寫,而域不能。n2屬性的set方法可以對用戶指定的值value,進(jìn)展有效性檢查,
6、從而保證只需正確的形狀才會得到設(shè)置,而域不能。n3屬性的get方法不僅可以前往域變量的值,還可以前往一些經(jīng)過計算或處置過的數(shù)據(jù),如上例中的只讀屬性Info,它前往的由Name及Age組合過的字符串。n4由于屬性在實現(xiàn)時,實踐上是方法,所以可以具有方法的一些優(yōu)點(diǎn),如可以定義籠統(tǒng)屬性等等。索引(Indexer) 修飾符 類型名 this 參數(shù)列表 set get運(yùn)用索引 n對象名 參數(shù) n編譯器自動產(chǎn)生兩個方法,以供調(diào)用:nT get_Item(P);nvoid set_Item(P, T value);IndexerRecord.cs屬性與索引的比較 屬屬 性性索索 引引經(jīng)過稱號標(biāo)識經(jīng)過參數(shù)列表
7、進(jìn)展標(biāo)識經(jīng)過簡單稱號來訪問經(jīng)過運(yùn)算符來訪問可以用static修飾不能用static修飾屬性的get訪問器沒有參數(shù)索引的get訪問器具有與索引一樣的參數(shù)列表屬性的set訪問器包含隱式value參數(shù)除了value參數(shù)外,索引的set訪問器還具有與索引一樣的參數(shù)列表IndexerBitArray.cs3.3 類的承繼 運(yùn)用承繼的例如n我們定義的窗體npublic class Form1 : System.Windows.Forms.Form承繼(inheritance) n子類subclass、父類baseclassn單承繼n一切的類都是經(jīng)過直接或間接地承繼object(即System.Object
8、)得到的。class SubClass : BaseClass 例如class Student : Person /.承繼n子類自動地從父類那里承繼一切域、方法、屬性、索引等成員作為本人的成員。n除了承繼父類的成員外,子類還可以添加新的成員,還可以隱藏或修正父類的成員。 域的承繼、添加與隱藏 class Apublic int a;class B : Anew public int a;方法的承繼、添加n方法的承繼n方法的添加與父類同名的方法n一是定義同名、但參數(shù)列表簽名與父類不同的方法,這稱為對父類方法的重載Overloading n二是定義同名且參數(shù)列表也與父類一樣的方法,這稱為新添加一種
9、方法 ,用new表示n三是定義同名且參數(shù)列表也與父類一樣的方法,而且父類的方法用了abstract或virtual進(jìn)展了修飾,子類的同名方法用了override進(jìn)展了修飾,這稱為虛方法的覆蓋Overriding。 InheritFieldMethod.cs運(yùn)用base void sayHello()base.sayHello();Console.WriteLine( My school is + school );Student(string name, int age, string school ) : base( name, age )this.school = school;父類與子類
10、的轉(zhuǎn)換 Person p1 = new Person();Person p2 = new Student();Student s1 = new Student();Student s2 = new Student();p1 = s1; /可以,由于Person類型的變量可以援用Student對象s2 = p1; /不行,由于會產(chǎn)生編譯錯誤s2 = (Student) p1; / 編譯時可以經(jīng)過,運(yùn)轉(zhuǎn)時那么會出現(xiàn)類型不能轉(zhuǎn)換的異常s2 = (Student) p2; /正確,由于p2援用的正好是Student對象實例as運(yùn)算符n假設(shè)不能轉(zhuǎn)換,那么值為nullnStudent s3 = p1 as
11、 Student; /結(jié)果s3為nullnStudent s4 = p2 as Student; /s4被賦值n與強(qiáng)迫類型轉(zhuǎn)換的差別nas只能針對援用型變量n假設(shè)不能轉(zhuǎn)換,as運(yùn)算不會引起異常,只是值為null is運(yùn)算符nif( p is Person )n判別一個對象是不能某個類(及其子類)的實例typeof()運(yùn)算符n獲得其運(yùn)轉(zhuǎn)時的類型nType t = typeof(變量);nType t = typeof(類名);屬性、索引的承繼 3.4 修飾符 訪問控制符 訪問控制訪問控制符符同類同類中中一樣程序集一樣程序集的子類的子類一樣程序集一樣程序集的非子類的非子類不同程序集不同程序集的子類
12、的子類不同程序集不同程序集的非子類的非子類publicYesYesYesYesYesprotected internalYesYesYesYes protectedYesYes Yes internalYesYesYes privateYes static nstatic的域、方法、屬性是屬于整個類的nstatic方法中,不能訪問實例變量 n調(diào)用static方法時,直接用類名訪問 nConsole.Write(); Math.Sqrt();nConvert.ToDateTime(); DateTime.ParsenString.Copy(a);String.Format(“0,x)nstati
13、c變量可以用來表示“全局變量n在c#2.0中,類名也可以用static來修飾StaicAndInstance.csstatic構(gòu)造方法 class Person static long totalNum;static Person() totalNum = (long)52e8;Console.WriteLine(人類總?cè)丝?+ totalNum );Static構(gòu)造方法只會調(diào)用一次,但其調(diào)用時間是不確定的。const及readonly nconst相當(dāng)于靜態(tài)常量n如Math.PInreadonly相當(dāng)于不可改量,只能賦一次值n如String.Emptyn在構(gòu)造方法中賦值,或者在聲明時就賦值n
14、注:nconst 只能用于根本類型及string假設(shè)用于其他類型那么無意義,由于只能為null值。nreadonly只能修飾域,而const還可以修飾部分變量Constans.csReadonlyColor.cssealed及abstract nsealed類,不可承繼(也有利于編譯優(yōu)化)n如String Console Math Convert Graphics Fontnabstract類,不可實例化newn如Array, RandomNumberGeneratornabstract的方法體,不用,用;nabstract 類型 方法名( 參數(shù)列表 );nabstract 類型 屬性名get
15、;set;籠統(tǒng)類表示了其子類的屬性AbstractShapeTest.cs3.5 接口 接口(interface) n類似于籠統(tǒng)類n一個籠統(tǒng)成員的集合n如:ICloneable, IComparable, IConvertible, IDisposable, IFormattable, IEnumerable 協(xié)助實現(xiàn)多重承繼接口的用途 n實現(xiàn)不相關(guān)類的一樣行為 n需求思索這些類之間的層次關(guān)系 n經(jīng)過接口可以了解對象的交互界面,而不需了解對象所對應(yīng)的類 n例如:npublic sealed class String : IComparable, ICloneable, IConvertible
16、, IEnumerable定義一個接口 public interface IStringListvoid Add(string s);int Count get; string thisint index get; set; 注:public abstract 這兩個關(guān)鍵詞不加實現(xiàn)接口 class 類名 : 父類, 接口, 接口, ,接口TestInterface.cs顯式接口成員實現(xiàn) n方法名前寫接口名nvoid IWindow.Close () n調(diào)用時,只能用接口調(diào)用n( ( IWindow ) f ).Close(); n在不同接口的方法一樣時,能消除歧義 InterfaceExpli
17、citImpl.cs3.6 構(gòu)造及枚舉 構(gòu)造struct構(gòu)造,如: Point, Color, Size, DateTime, Int32 struct 構(gòu)造名 : 接口名構(gòu)造是隱式sealed;因此它們不能被承繼。運(yùn)用struct要留意nstruct是值類型n構(gòu)造不能包含無參數(shù)構(gòu)造方法 n每個域在定義時,不能給初始值n構(gòu)造方法中,必需對每個域進(jìn)展賦值n實例化時,運(yùn)用new,但與援用型變量的內(nèi)存是不同的n值類型變量在賦值時,實行的是域的copyStructNew.csStructPoint.cs枚舉 (enum)如FontStyle, GraphicsUnit, KnownColor, Doc
18、kStyle, DialogResult聲明本人的屬性enum MyColor (注:后者可以跟一個 : int )Red, Green=1,Blue=2EnumColor.cs運(yùn)用枚舉nMyColor c = MyColor.Red; nConsole.WriteLine( c.ToString() ); nc = n(MyColor) Enum.Parse( typeof(MyColor), Red);3.7 面向?qū)ο缶幊堂嫦驅(qū)ο驩OnObject Oriented方法的三大特點(diǎn)n承繼 inheritancen子類承繼父類的成員,還可添加、調(diào)用、隱藏n提高軟件模塊的可重用性和可擴(kuò)展性n封裝 encapsulationn運(yùn)用接口,而不關(guān)懷詳細(xì)的類n運(yùn)用屬性,而將域設(shè)為privaten多態(tài) polymorphismn一樣的方法,不同的參數(shù)n自動調(diào)用子類相應(yīng)的方法虛方法調(diào)用,以后講UML類圖簡介nUML,一致建模言語n有類圖、形狀圖、時序圖等多種圖形VS中的類關(guān)系圖n在工程上,點(diǎn)右鍵,查看類關(guān)系圖“n添加新項,其他項,類關(guān)系圖n然后將相應(yīng)的類文件拖動到該“類關(guān)系圖中UML工具nIBM Rational XDE for .NETnBorland TogethernMicrosoft Vision正向工程,由UML圖自動產(chǎn)生代碼n反向工程,由代碼自動
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版電廠煤炭采購合同與環(huán)保型付款策略3篇
- 2025年碳晶片技術(shù)培訓(xùn)及咨詢合同3篇
- 開發(fā)商繼續(xù)履行合同范本(2篇)
- 工廠員工勞動合同(2篇)
- 二零二五版貨物代理合同范本3篇
- 二零二五年度棉花價格指數(shù)編制與應(yīng)用合同4篇
- 2025年度個人購房借款合同物業(yè)管理服務(wù)協(xié)議3篇
- 二零二五年度中小企業(yè)應(yīng)收賬款質(zhì)押貸款合同范本4篇
- 2025年航空航天產(chǎn)業(yè)投資入股分紅合同3篇
- 2025年度租賃車輛智能監(jiān)控服務(wù)合同遠(yuǎn)程管理4篇
- 加強(qiáng)教師隊伍建設(shè)教師領(lǐng)域?qū)W習(xí)二十屆三中全會精神專題課
- 2024-2025學(xué)年人教版數(shù)學(xué)七年級上冊期末復(fù)習(xí)卷(含答案)
- 2025年慢性阻塞性肺疾病全球創(chuàng)議GOLD指南修訂解讀課件
- 2024年上海市中考數(shù)學(xué)真題試卷及答案解析
- 2024年全國卷1高考理綜試題及答案
- (完整版)金融市場基礎(chǔ)知識知識點(diǎn)歸納-圖文
- 五年級數(shù)學(xué)(小數(shù)乘除法)計算題專項練習(xí)及答案
- 小學(xué)數(shù)學(xué)知識結(jié)構(gòu)化教學(xué)
- 2022年睪丸腫瘤診斷治療指南
- 被執(zhí)行人給法院執(zhí)行局寫申請范本
- 飯店管理基礎(chǔ)知識(第三版)中職PPT完整全套教學(xué)課件
評論
0/150
提交評論