第3章-面向對象的C語言解析課件_第1頁
第3章-面向對象的C語言解析課件_第2頁
第3章-面向對象的C語言解析課件_第3頁
第3章-面向對象的C語言解析課件_第4頁
第3章-面向對象的C語言解析課件_第5頁
已閱讀5頁,還剩63頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章面向對象的C#語言本章內容類、域、方法屬性、索引類的繼承修飾符接口結構與枚舉面向對象:繼承、封裝、多態(tài)UML類圖簡介

3.1類、域、方法定義類中的域和方法classPerson{ publicstringname; publicintage; publicvoidsayHello(){ Console.WriteLine("Hello!Mynameis"+name); } publicstringgetInfo(){ return"Name:"+name+",Age:"+age; }}構造方法

(1)構造方法的方法名與類名相同。(2)構造方法沒有返回類型,也不能寫void。(3)構造方法的主要作用是完成對象的初始化工作。(4)構造方法一般不能顯式地直接調用,而是用new來調用。缺省構造方法

publicPerson(){}析構方法

classPerson{

…… ~Person(){

…… } }對象的創(chuàng)建Personp=new Person(“Liming”,20);

對象的使用Console.WriteLine();p.sayHello();方法的重載,簽名

publicvoidsayHello(){ Console.WriteLine("Hello!Mynameis"+name);}publicvoidsayHello(Personanother){ Console.WriteLine("Hello,"++"!Mynameis"+name);}OverloadingTest.cs使用this publicPerson(intage,stringname){ this.age=age; =name; } publicPerson():this(0,"") { //構造方法的其他語句; }應用示例:銀行系統(tǒng)系統(tǒng)中有幾類對象?Account,Bank,ATM每個類中有什么域、方法?

3.2屬性、索引

使用屬性、索引的示例使用屬性button1.Textbutton1.Text=“說你好”;含義相當于button1.SetText(“說你好”);Strings=button1.Text;含義相當于s=button1.GetText();使用屬性strings=“abcde”;求出長度:s.Length含義上相當于s.GetLength();使用索引strings=“abcde”;求出第0個字符:s[0]含義上相當于s.Get(0)privatestringmyName;publicstringName{ get { returnmyName; } set { myName=value; }}對屬性進行訪問

Personp=newPerson(); p.Name=“LiMing”; Console.WriteLine(p.Name);編譯器產(chǎn)生的方法是:

voidset_Name(stringvalue); stringget_Name();PersonProperty.cs屬性與域的比較

(1)

屬性可以實現(xiàn)只讀或只寫,而域不能。(2)

屬性的set方法可以對用戶指定的值(value),進行有效性檢查,從而保證只有正確的狀態(tài)才會得到設置,而域不能。(3)

屬性的get方法不僅可以返回域變量的值,還可以返回一些經(jīng)過計算或處理過的數(shù)據(jù),如上例中的只讀屬性Info,它返回的由Name及Age組合過的字符串。(4)

由于屬性在實現(xiàn)時,實際上是方法,所以可以具有方法的一些優(yōu)點,如可以定義抽象屬性等等。索引(Indexer)

修飾符類型名this[參數(shù)列表] { set { } get { } }使用索引

對象名[參數(shù)

]編譯器自動產(chǎn)生兩個方法,以供調用:Tget_Item(P);voidset_Item(P,Tvalue);IndexerRecord.cs屬性與索引的比較

性索

引通過名稱標識通過參數(shù)列表進行標識通過簡單名稱來訪問通過[]運算符來訪問可以用static修飾不能用static修飾屬性的get訪問器沒有參數(shù)索引的get訪問器具有與索引相同的參數(shù)列表屬性的set訪問器包含隱式value參數(shù)除了value參數(shù)外,索引的set訪問器還具有與索引相同的參數(shù)列表IndexerBitArray.cs

3.3類的繼承

使用繼承的示例我們定義的窗體publicclassForm1:System.Windows.Forms.Form繼承(inheritance)子類subclass、父類baseclass單繼承所有的類都是通過直接或間接地繼承object(即System.Object)得到的。classSubClass:BaseClass{……}示例 classStudent:Person{ //….. }繼承子類自動地從父類那里繼承所有域、方法、屬性、索引等成員作為自己的成員。除了繼承父類的成員外,子類還可以添加新的成員,還可以隱藏或修改父類的成員。

域的繼承、添加與隱藏

classA{ publicinta;}classB:A{

newpublicinta;}方法的繼承、添加方法的繼承方法的添加與父類同名的方法一是定義同名、但參數(shù)列表(簽名)與父類不同的方法,這稱為對父類方法的重載(Overloading)二是定義同名且參數(shù)列表也與父類相同的方法,這稱為新增加一種方法,用new表示三是定義同名且參數(shù)列表也與父類相同的方法,而且父類的方法用了abstract或virtual進行了修飾,子類的同名方法用了override進行了修飾,這稱為虛方法的覆蓋(Overriding)。InheritFieldMethod.cs使用base voidsayHello(){ base.sayHello(); Console.WriteLine("Myschoolis"+school); }Student(stringname,intage,stringschool):

base(name,age){ this.school=school;}父類與子類的轉換

Personp1=newPerson(); Personp2=newStudent(); Students1=newStudent(); Students2=newStudent(); p1=s1;//可以,因為Person類型的變量可以引用Student對象

s2=p1;//不行,因為會產(chǎn)生編譯錯誤

s2=(Student)p1;//編譯時可以通過,運行時則會出現(xiàn)類型不能轉換的異常

s2=(Student)p2;//正確,因為p2引用的正好是Student對象實例as運算符如果不能轉換,則值為nullStudents3=p1asStudent;//結果s3為nullStudents4=p2asStudent;//s4被賦值與強制類型轉換的差別as只能針對引用型變量如果不能轉換,as運算不會引起異常,只是值為null

is運算符if(pisPerson)判斷一個對象是不能某個類(及其子類)的實例typeof()運算符獲得其運行時的類型Typet=typeof(變量);Typet=typeof(類名);屬性、索引的繼承

3.4修飾符

訪問控制符

訪問控制符同類中相同程序集的子類相同程序集的非子類不同程序集的子類不同程序集的非子類publicYesYesYesYesYesprotectedinternalYesYesYesYes

protectedYesYes

Yes

internalYesYesYes

privateYes

staticstatic的域、方法、屬性是屬于整個類的static方法中,不能訪問實例變量調用static方法時,直接用類名訪問Console.Write(…);Math.Sqrt(…);Convert.ToDateTime(…);DateTime.ParseString.Copy(a);String.Format(“{0}”,x)static變量可以用來表示“全局變量”在c#2.0中,類名也可以用static來修飾StaicAndInstance.csstatic構造方法

classPerson{ staticlongtotalNum; staticPerson(){ totalNum=(long)52e8; Console.WriteLine("人類總人口"+totalNum); }}static方法只會調用一次,但其調用時間是不確定的。const及readonlyconst相當于靜態(tài)常量如Math.PIreadonly相當于不可改量,只能賦一次值如String.Empty在構造方法中賦值,或者在聲明時就賦值注:const只能用于基本類型及string(如果用于其他類型則無意義,因為只能為null值)。readonly只能修飾域,而const還可以修飾局部變量Constans.csReadonlyColor.cssealed及abstractsealed類,不可繼承(也有利于編譯優(yōu)化)如StringConsoleMathConvertGraphicsFontabstract類,不可實例化(new)如Array,RandomNumberGeneratorabstract的方法體,不用{},用;abstract類型方法名(參數(shù)列表);abstract類型屬性名{get;set;}

抽象類表示了其子類的屬性AbstractShapeTest.cs

3.5接口

接口(interface)相似于抽象類一個抽象成員的集合如:ICloneable,IComparable,IConvertible,IDisposable,IFormattable,IEnumerable

幫助實現(xiàn)多重繼承接口的用處

實現(xiàn)不相關類的相同行為

需要考慮這些類之間的層次關系

通過接口可以了解對象的交互界面,而不需了解對象所對應的類

例如:publicsealedclassString:IComparable,ICloneable,

IConvertible,IEnumerable定義一個接口

publicinterfaceISringList{ voidAdd(strings); intCount{get;} stringthis[intindex]{get;set;}}實現(xiàn)接口

class類名:[父類,]接口,接口,……,接口

{

……… }TestInterface.cs顯式接口成員實現(xiàn)

方法名前寫接口名voidIWindow.Close(){……}調用時,只能用接口調用((IWindow)f).Close();在不同接口的方法相同時,能消除歧義

InterfaceExplicitImpl.cs

3.6結構及枚舉

結構struct結構,如:Point,Color,Size,DateTime,Int32struct結構名[:接口名]{

……}結構是隱式sealed;因此它們不能被繼承。使用struct要注意struct是值類型結構不能包含無參數(shù)構造方法

每個域在定義時,不能給初始值構造方法中,必須對每個域進行賦值實例化時,使用new,但與引用型變量的內存是不同的值類型變量在賦值時,實行的是域的copyStructNew.csStructPoint.cs枚舉

(enum)如FontStyle,GraphicsUnit,KnownColor,DockStyle,DialogResult聲明自己的屬性enumMyColor(注:后者可以跟一個:int){ Red, Green=1, Blue=2}EnumColor.cs使用枚舉MyColorc=MyColor.Red;Console.WriteLine(c.ToString());c

溫馨提示

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

評論

0/150

提交評論