3第講面向?qū)ο蟮恼Z言7小結(jié)3jiang jiang_第1頁
3第講面向?qū)ο蟮恼Z言7小結(jié)3jiang jiang_第2頁
3第講面向?qū)ο蟮恼Z言7小結(jié)3jiang jiang_第3頁
3第講面向?qū)ο蟮恼Z言7小結(jié)3jiang jiang_第4頁
3第講面向?qū)ο蟮恼Z言7小結(jié)3jiang jiang_第5頁
已閱讀5頁,還剩67頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、C#程序設(shè)計及應(yīng)用唐大仕dstang2000Copyright © by ARTCOM PTs.C#程序設(shè)計第3章 面向?qū)ο蟮腃#語言第3章面向?qū)ο蟮腃#語言唐大仕dstang20002唐大仕C#程序設(shè)計本章內(nèi)容 類、字段、方法 屬性、索引 類的繼承 修飾符 接口 結(jié)構(gòu)與枚舉 面向?qū)ο螅豪^承、封裝、多態(tài) UML類圖簡介3唐大仕C#程序設(shè)計3.1 類字段方法唐大仕4C#程序設(shè)計現(xiàn)實中的事物抽象為類 類(class)最基本的要素是p 字段(field):p 方法(method):變量函數(shù)5唐大仕C#程序設(shè)計定義類中的字段和方法public string name; public int

2、age;public void SayHello()Console.WriteLine("Hello! My name is " + name );public string GetInfo()return "Name: " + name + ", Age: " + age;6唐大仕C#程序設(shè)計構(gòu)造方法(constructor) 構(gòu)造方法的主要作用是完成對象的初始化工作 (1)構(gòu)造方法的方法名與類名相同。 (2)構(gòu)造方法沒有返回類型,也不能寫void。public( string n, int a )name = n;age = a;

3、7唐大仕C#程序設(shè)計默認(default)構(gòu)造方法 如果用戶沒有定義任何構(gòu)造方法, 則系統(tǒng)會自動產(chǎn)生一個 public() 8唐大仕C#程序設(shè)計對象的創(chuàng)建 構(gòu)造方法不能顯式地直接調(diào)用,而是用new來調(diào)用。(“Liming”,p=new20);nameagep9唐大仕C#程序設(shè)計對象的使用(“Liming”,p=new20); Console.WriteLine( ); p.SayHello();10唐大仕C#程序設(shè)計析構(gòu)方法class() 由于C#自動進行對象的,所以用戶一般不定義析構(gòu)方法11唐大仕C#程序設(shè)計方法的重載(overloading)public void SayHe

4、llo()Console.WriteLine("Hello! My name is " + name );public void SayHello(another )Console.WriteLine("Hello," + + "! My name is " + name );方法的簽名:方法名及參數(shù)個數(shù)及類型(參數(shù)名不算)OverloadingTest.cs12唐大仕C#程序設(shè)計使用thisthis指這個對象本身,常用于:(1)這個對象的字段及方法(VS會智能提示)(2)區(qū)分字段與局部變量public( in

5、t age, string name )this.age = age; = name;(3) 用于構(gòu)造方法調(diào)用另一個構(gòu)造方法,注意其位置public() : this( 0, "" )/ 構(gòu)造方法的其他語句 ;13唐大仕C#程序設(shè)計應(yīng)用示例:系統(tǒng) 系統(tǒng)中有幾類對象?Account, Bank, ATM 每個類中有什么字段、方法?注:可在vs中,添加“類關(guān)系圖”(類圖)14唐大仕C#程序設(shè)計C#程序設(shè)計使用屬性、索引的示例 使用屬性button1.Textp button1.Text = “說你好”; 含義相當于button1.SetText( “說你好”

6、);p string s = button1.Text; 含義相當于s = button1.GetText(); 使用屬性 string s=“abcde”;p 求出長度: s.Length 含義上相當于s.GetLength(); 使用索引 string s=“abcde”;p 求出第0個字符: s0 含義上相當于s.Get(0)16唐大仕屬性(property)的書寫C#程序設(shè)計private string _name;public string Namegetreturn _name;set_name = value;17唐大仕C#程序設(shè)計在C#3以上版中可簡寫為 public stri

7、ng Name set; get; 18唐大仕C#程序設(shè)計對屬性進行p = new();p.Name = “Li Ming”;Console.WriteLine( p.Name ); 編譯器產(chǎn)生的方法是:void set_Name( string value );string get_Name();PC#程序設(shè)計屬性與字段的比較 由于屬性實際上是方法, 所以屬性可以具有優(yōu)點p 可以只讀或只寫:只有g(shù)et或setp 可以進行有效性檢查: ifp 可以是計算得到的數(shù)據(jù):public string Infogetreturn "Name:" + Name +",Age:

8、" + Age;p 可以定義抽象屬性20唐大仕C#程序設(shè)計索引器(Indexer)類型名 this 參數(shù)列表 修飾符setget21唐大仕C#程序設(shè)計使用索引 對象名 參數(shù) 編譯器自動產(chǎn)生兩個方法,以供調(diào)用: T get_Item(P); void set_Item(P, T value);I唐n大d仕rRecord.cs22C#程序設(shè)計屬性與索引的比較I唐n大d仕rBitArray.cs23屬性索引器通過名稱標識通過參數(shù)列表進行標識通過簡單名稱來通過運算符來可以用static修飾不能用static修飾屬性的get器沒有參數(shù)索引的get器具有與索引相同的參數(shù)列表屬性的set器包含隱式

9、value參數(shù)除了value參數(shù)外,索引的set器還具有與索引相同的參數(shù)列表C#程序設(shè)計C#程序設(shè)計使用繼承的示例 我們定義的窗體p public class Form1 : System.Windows.Forms.Formp 神奇的冒號25唐大仕C#程序設(shè)計繼承(inheritance) 子類subclass、父類baseclass C#中采用單繼承 所有的類都是通過直接或間接地繼承 object(即System.Object)得到的。class SubClass : BaseClass 26唐大仕C#程序設(shè)計示例classStudent:/.27唐大仕C#程序設(shè)計繼承 子類自動地從父類那

10、里繼承所有的p 字段、方法、屬性、索引器等成員作為自己的成員。 除了繼承父類的成員外,子類還可以p 添加新的成員,p 隱藏或修改父類的成員。28唐大仕C#程序設(shè)計字段的繼承、添加與隱藏classApublic int a;classB : Anew public int a;29唐大仕C#程序設(shè)計方法的繼承、添加 方法的繼承(自動) 方法的添加(多定義一些方法)30唐大仕C#程序設(shè)計與父類同名的方法 一是定義同名、但參數(shù)列表(簽名)與父類不同的方法,這稱為對父類方法的重載(Overloading) 二是定義同名且參數(shù)列表也與父類相同的方法,這稱為新增加法,用new表示 三是定義同名且參數(shù)列表也

11、與父類相同的方法,而且父類的方法用了abstract或virtual進行了修飾,子類的同名方法用了override進行了修飾,這稱為虛方法的覆蓋(Overriding)。I唐n大h仕FieldMethod.cs31C#程序設(shè)計使用basevoid sayHello()base.sayHello();Console.WriteLine( "My school is " + school );Student(string name, int age, string school ) : base( name, age )this.school = school;32唐大仕C#程

12、序設(shè)計父類與子類的轉(zhuǎn)換p2 = new Student(); Student s1 = new Student();Student s2 = new Student();p1 = s1; /可以,因為Student對象類型的變量可以s2 = p1; /不行,因為會產(chǎn)生編譯錯誤s2 = (Student) p1; / 編譯時可以通過,運行時則會出現(xiàn)類型不能轉(zhuǎn)換的異常s2 = (Student) p2; /正確,因為p2的正好是Student對象實例33唐大仕C#程序設(shè)計as運算符 如果不能轉(zhuǎn)換,則值為nullStudent;/結(jié)果s3為nullStudent;/s4被賦值p Studentp S

13、tudents3 =s4 =p1p2asas 與強制類型轉(zhuǎn)換的差別p as只能型變量p 如果不能轉(zhuǎn)換,as運算引起異常,只是值為null34唐大仕C#程序設(shè)計is運算符 if( p is)一個對象是不能某個類(及其子類)的實例35唐大仕C#程序設(shè)計typeof()運算符 獲得其運行時的類型p Type t = typeof(變量);p Type t = typeof(類名);36唐大仕C#程序設(shè)計屬性、索引的繼承 屬性、索引也是可以繼承的37唐大仕C#程序設(shè)計C#程序設(shè)計符39唐大仕符同類相同程序集中的子類相同程序集的非子類不同程序集的子類不同程序集的非子類publicYesYesYesYes

14、YesprotectedinternalYesYesYesYesprotectedYesYesYesinternalYesYesYesprivateYesC#程序設(shè)計static static的字段、方法、屬性是屬于整個類的p static方法中,不能實例變量p 調(diào)用static方法時,直接用類名Console.Write();Math.Sqrt();Convert.ToDateTime(); DateTime.ParseString.Copy(a);String.Format(“0”,x)p static變量可以用來表示“全局變量” 在c#2.0中,類名也可以用static來修飾S唐t大a仕

15、idInstance.cs40C#程序設(shè)計static構(gòu)造方法classstatic long totalNum;static() totalNum = (long)52e8;Console.WriteLine("人類總?cè)丝?quot; + totalNum );Static構(gòu)造方法只會調(diào)用一次,但其調(diào)用時間是不確定的。41唐大仕C#程序設(shè)計const及readonly const相當于靜態(tài)常量p 如Math.PI readonly相當于不可改量,只能賦一次值p 如String.Emptyp 在構(gòu)造方法中賦值,或者在 注:時就賦值p const 只能用于基本類型及stringp re

16、adonly只能修飾字段,而const還可以修飾局部變量ReadonlyColor.csC唐o大n仕s.cs42C#程序設(shè)計sealed及abstract sealed類,不可繼承(也有利于編譯優(yōu)化)p 如StringConsoleMathConvert Graphics Font abstract類,不可實例化(new)p 如Array, RandomNumberGenerator abstract的方法體,不用,用;p abstract類型 方法名( 參數(shù)列表 );p abstract類型屬性名get;set;43唐大仕C#程序設(shè)計抽象類表示了其子類的屬性A唐b大仕stShapeTest.

17、cs44C#程序設(shè)計小結(jié) public/private/internal/protected 是符 static 屬于類的而非實例的 const 常量readonly只讀量 sealed 不可繼承的abstract 抽象的 唐大仕 4545C#程序設(shè)計3.5接口46唐大仕C#程序設(shè)計接口(interface) 相似于抽象類 一個抽象成員的集合 如:ICloneable,IComparable,IConvertible,IDisposable,IFormattable,IEnumerable47唐大仕C#程序設(shè)計幫助實現(xiàn)多重繼承48唐大仕C#程序設(shè)計接口的用處 實現(xiàn)不相關(guān)類的相為 需要考慮這些類

18、之間的層次關(guān)系 通過接口可以了解對象的交互界面,而不需了解對象所對應(yīng)的類 例如:p public sealed class String : IComparable, ICloneable,IConvertible, IEnumerable49唐大仕C#程序設(shè)計定義一個接口public interface IStringListvoid Add(string s); int Count get; string thisint index get; set; 注:publicabstract 這兩個不加50唐大仕C#程序設(shè)計實現(xiàn)接口class 類名 : 父類, 接口, 接口, ,接口T唐e大s仕

19、erface.cs51C#程序設(shè)計顯式接口成員實現(xiàn) 方法名前寫接口名p void IWindow.Close () 調(diào)用時,只能用接口調(diào)用p ( ( IWindow ) f ).Close(); 在不同接口的方法相同時,能消除歧義I唐n大t仕aceExplicitImpl.cs52C#程序設(shè)計第3章 面向?qū)ο蟮腃#語言3.6結(jié)構(gòu)及枚舉53唐大仕C#程序設(shè)計結(jié)構(gòu)struct結(jié)構(gòu),如: Point, Color, Size, DateTime,Int32struct結(jié)構(gòu)名: 接口名結(jié)構(gòu)是隱式sealed;因此它們不能被繼承。54唐大仕C#程序設(shè)計使用struct要注意 struct是值類型p 結(jié)構(gòu)

20、不能包含無參數(shù)構(gòu)造方法p 每個字段在定義時,不能給初始值p 構(gòu)造方法中,必須對每個字段進行賦值p 實例化時,使用new,但與型變量的內(nèi)存是不同的p 值類型變量在賦值時,實行的是字段的copy唐S大t仕rPoint.csStructNew.cs55C#程序設(shè)計枚舉 (enum)如FontStyle, GraphicsUnit, KnownColor, DockStyle,DialogResult自己的屬性(注:后者可以跟一個 : int )enum MyColorRed, Green=1, Blue=2E唐n大仕uolor.cs56C#程序設(shè)計使用枚舉 MyColor c = MyColor.Red; Console.WriteLine( c.ToString() ); c=p (MyColor) Enum.Parse( typeof(MyColor), "Red");57唐大仕C#程序設(shè)計第3章 面向?qū)ο蟮腃#語言3.7 面向?qū)ο缶幊?8唐大仕C#程序設(shè)計面向?qū)ο驩O Object Oriented方法的三大特點p 繼承 inheritance 子類繼承父類的成員,還可增加、調(diào)用、隱藏 提高軟件模塊的可重用性和可擴充性p 封裝 encapsulation 使用接口,而不關(guān)心具體的類 使用屬性,而將字段設(shè)為privatep 多態(tài) polymo

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論