第三章 C#程序設計基礎(chǔ)_第1頁
第三章 C#程序設計基礎(chǔ)_第2頁
第三章 C#程序設計基礎(chǔ)_第3頁
第三章 C#程序設計基礎(chǔ)_第4頁
第三章 C#程序設計基礎(chǔ)_第5頁
已閱讀5頁,還剩84頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第第3章章 C#程序設計基礎(chǔ)程序設計基礎(chǔ) 內(nèi)容提要n本章主要分析本章主要分析C#的語法,的語法,C#作為作為.NET的原生語言,功能非常強大。的原生語言,功能非常強大。n作為作為ASP.NET的編程基礎(chǔ),主要分析的編程基礎(chǔ),主要分析C#的變量、常量、控制語句、的變量、常量、控制語句、C#的異常處的異常處理、理、C#類的基本使用方法和類的基本使用方法和C#語言面語言面向?qū)ο蟮母呒壧匦?。向?qū)ο蟮母呒壧匦浴?3.1 C#概述 nC#是微軟公司專門為.NET量身定做的編程語言,它與.NET有著密不可分的關(guān)系。nC#的類型就是.NET框架所提供的類型,C#本身并無類庫,而是直接使用.NET框架所提供的類

2、庫。n另外,類型安全檢查、結(jié)構(gòu)化異常處理也都是交給CLR處理的。因此,C#是最適合開發(fā).NET應用的編程語言。 C#的特點 nC#不僅具有C+的強大功能,而且具有Visual Basic簡單易用的特性。C#的語法與C+基本相同。n默認情況下,C#代碼在.NET框架提供的受控環(huán)境下運行,增強了程序的安全性。nC#不推薦使用指針,若要使用指針,必須使用關(guān)鍵字 “unsafe”將代碼聲明為非安全的。nC#采用垃圾回收機制,能夠在合適的時機回收不再使用的內(nèi)存資源。Framework命名空間 n命名空間用于組織.NET Framework提供的幾千個類。n作為組織類的邏輯單元,命名空間成了應用程序的組織

3、形式。n使用命名空間可以解決類名沖突問題。n利用using語句導入命名空間,如“using system;”表示導入system命名空間。C#程序結(jié)構(gòu) 案例名稱:第一個案例名稱:第一個C#程序程序程序名稱:程序名稱:3-01.csusingSystem;classHellopublicstaticvoidMain()Console.WriteLine(您好!);C#編譯器 n.NET Framework SDK內(nèi)置了C#編譯器“csc.exe(C Sharp Compiler)”,該文件在“WINDOWSMicrosoft.NETFrameworkv版本號”目錄下。n如果不能執(zhí)行該命令,需要將

4、該目錄添加到操作系統(tǒng)的PATH變量中??梢栽诿畲翱诰幾gC#文件,假如要編譯名為3-01.cs的C#文件。命令行的語法為:ncsc 3-01.cs不用不用using導入命名空間導入命名空間案例名稱:不用案例名稱:不用using導入命名空間導入命名空間程序名稱:程序名稱:3-02.csclassHellopublicstaticvoidMain()System.Console.WriteLine(您好!);程序的輸入和輸出 n其中,“0”代表第一個參數(shù),“n-1”代表第n個參數(shù)案例名稱:利用案例名稱:利用ReadLine()讀入數(shù)據(jù)讀入數(shù)據(jù)程序名稱:程序名稱:3-03.csusingSystem

5、;classHellopublicstaticvoidMain()Console.Write(請輸入你的名字:);stringstr_bookName=Console.ReadLine();Console.WriteLine(您好!0,str_bookName);命令行參數(shù) 案例名稱:使用命令行參數(shù)案例名稱:使用命令行參數(shù)程序名稱:程序名稱:3-04.csusingSystem;publicclassHellopublicstaticvoidMain(stringargs)Console.WriteLine(你共有0個朋友,args.Length);Console.WriteLine(你的朋友

6、列表為:);for(inti=0;iargs.Length;i+)Console.WriteLine(Arg0=1,i,argsi);C#注釋 案例名稱:使用注釋案例名稱:使用注釋程序名稱:程序名稱:3-05.csusingSystem;classHellostaticvoidMain()/*聲明一個DateTime變量t并將當前日期賦給t*/DateTimet=DateTime.Today;stringstr_Time;/聲明一個字符串變量str_Timestr_Time=t.ToLongDateString();Console.WriteLine(當前日期是:0,str_Time); 變量

7、和常量 nC#是大小寫敏感的,即大寫和小寫字母認為是不同的字母。例如變量名something,Something,SOMETHING都是不同的名字。n命名變量名要遵守如下的規(guī)則:n不能是C#關(guān)鍵字n第一個字符必須是字母或下劃線n不要太長,一般不超過31個字符為宜 n不能以數(shù)字開頭n中間不能有空格n變量名中不能包含“.;,”+-”之類的特殊符號。一般情況下,變量名中除了能使用26個英文大小寫字母和數(shù)字外,只能使用下劃線“_”n另外,C#允許在變量前加上前綴,也允許使用前綴加上關(guān)鍵字作為變量,如string using,但建議不用。變量聲明變量聲明n變量的修飾符有 public、internal、

8、protected、protected internal、private、static和readonly。nC#中將具有這些修飾符的變量稱為域域(字字段段),而把方法中定義的變量稱為局部變局部變量量。n注意:局部變量前不能添加public、internal、protected、protected internal、private、static和readonly等修飾符。修飾符修飾符n訪問修飾符 npublic:訪問不受限制,任何地方都可訪問。ninternal:允許同一程序集中的應用程序可以訪問。nprotected:在所屬的類或派生類中能被訪問。nprotected internal:允許同

9、一程序集中的應用程序可以訪問、所屬類或派生類中能被訪問。nprivate:在所屬的類中能被訪問。修飾符(續(xù))修飾符(續(xù))nstatic使用static聲明的變量稱靜態(tài)變量,又稱為靜態(tài)字段。訪問靜態(tài)字段時只能通過類直接訪問,而不能通過類的實例來訪問。nreadonly使用readonly聲明的變量稱為只讀變量,這種變量被初始化后在程序中不能修改它的值。變量的作用范圍變量的作用范圍n塊級:作用域范圍最小的變量,如包含在if、while等語句段中的變量。這種變量僅在塊內(nèi)有效,在塊結(jié)束后即被刪除。n方法級:作用于聲明變量的方法中,在方法外不能訪問。n對象級:作用于定義它的類的所有方法中。常量聲明常量聲

10、明n常量具有在編譯時值保持不變的特性,聲明時使用const關(guān)鍵字,同時必須初始化。案例名稱:使用常量案例名稱:使用常量程序名稱:程序名稱:3-06.csusingSystem;classHellopublicconst doublePI=3.14159265;staticvoidMain()Console.WriteLine(“圓周率PI的值為0”,PI);3.2 C#的數(shù)據(jù)類型 nC#的數(shù)據(jù)類型分為值類型(Value Type)和引用類型(Reference Type)兩大類。n值類型包括簡單類型(Simple Type)、結(jié)構(gòu)類型(Struct Type)和枚舉類型(Enum Type)3

11、種。n引用類型包括類類型(Class Type)、數(shù)組類型(Array Type)、委托類型(Delegate Type)和接口類型。 值類型-簡單類型 n簡單類型,是直接由一系列元素構(gòu)成的數(shù)據(jù)類型。nC#語言中提供了一組已經(jīng)定義好的簡單類型??梢苑譃檎麛?shù)類型、布爾類型、字符類型和實數(shù)類型。 簡單類型-整數(shù)類型 n整數(shù)類型變量的值為整數(shù)。計算機的存儲單元是有限的,所以計算機語言提供的整數(shù)類型的值總是在一定的范圍之內(nèi)。nC#中有八種整數(shù)類型,這些整數(shù)類型在數(shù)學上的表示以及在計算機中的取值范圍如下表所示。 整整數(shù)數(shù)類型在計算機中的取值范圍類型在計算機中的取值范圍整數(shù)類型特征取值類型sbyte有符號

12、8位整數(shù)-128-127byte無符號8位整數(shù)0-255short有符號16位整數(shù)-32768-32767ushort無符號16位整數(shù)0-65535int有符號32位整數(shù)-2147483648-2147483647uint無符號32位整數(shù)0-4294967295long有符號64位整數(shù)-9223372036854775808-9223372036854775807ulong無符號64位整數(shù)0-18446744073709551615使用整數(shù)類型使用整數(shù)類型案例名稱:使用整數(shù)類型案例名稱:使用整數(shù)類型程序名稱:程序名稱:3-07.csusingSystem;classHellopublicsta

13、ticvoidMain()shortx=32766;x+;Console.WriteLine(x);x+;Console.WriteLine(x);簡單類型-布爾類型 n布爾類型是用來表示“真”和“假”的。布爾類型表示的邏輯變量只有兩種取值。在C#中,分別采用true和false兩個值來表示。n在C語言中,用0來表示“假”,其他任何非零的值表示真。在C#中,布爾型變量只能是true或者false。簡單類型-實數(shù)類型 n實數(shù)在C#中采用兩種數(shù)據(jù)類型來表示:單精度(float)和雙精度(double)。它們的區(qū)別在于取值范圍和精度不同。n單精度:取值范圍在正負1.5*10-45到3.4*1038之

14、間,精度為七位。n雙精度:取值范圍在正負5.0*10-324到1.7*10308之間,精度為15-16位。n十進制(decimal)類型,主要用于方便做金融和貨幣方面的計算。使用m后綴來表明它是一個decimal型。如: decimal cur=100.0m 如果省略了m,則變量被賦值之前將被編譯器認作double型。簡單類型-字符類型 n字符類型采用Unicode字符集標準,一個字符長度為16位,用它可以表示世界上大多數(shù)語言。nchar類型變量聲明時必須包含在一對單引號中。n例nchar mychar=M;n也可以直接通過十六進制或者Unicode賦值。 char mychar=x0034;

15、/mychar=4 char mychar=u0039;/mychar=9常用轉(zhuǎn)義符對應表轉(zhuǎn)義符轉(zhuǎn)義符對應字符對應字符轉(zhuǎn)義符轉(zhuǎn)義符對應字符對應字符單引號單引號t水平水平tab雙引號雙引號n換行換行反斜杠反斜杠r回車回車0空字符空字符b退格退格值類型-結(jié)構(gòu)類型 n把一系列相關(guān)的變量組成一個單一的實體,其類型稱為結(jié)構(gòu),采用關(guān)鍵字struct來進行聲明。n結(jié)構(gòu)也是一種封裝,把同一事物的屬性和方法封裝到一個結(jié)構(gòu)體中??蓪崿F(xiàn)接口,可擁有與類相同的成員。n與類的主要區(qū)別:結(jié)構(gòu)是值類型而不是引用類型;結(jié)構(gòu)不支持繼承。案例名稱:使用結(jié)構(gòu)類型案例名稱:使用結(jié)構(gòu)類型 usingSystem;publicstruc

16、tStudentInfopublicstringName;publicstringphone;publicstringAddress;StudentInfostStudent;/stStudent為一個StudentInfo結(jié)構(gòu)類型變量值類型-枚舉類型 n枚舉類型是由一組命名常量組成的類型,使用enum關(guān)鍵字聲明。n枚舉中每個元素默認是整數(shù)類型,且第一個值為0,后面每個連續(xù)的元素依次加1遞增。若要改變默認起始值0,可以通過直接給第一個元素賦值的方法。n枚舉類型的變量在某一時刻只能取枚舉中某一元素的值。使用枚舉類型案例名稱:使用枚舉類型案例名稱:使用枚舉類型程序名稱:程序名稱:3-09.csus

17、ingSystem;enumWeekDaySunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday;classTeststaticvoidMain()WeekDayday;/聲明WeekDay的實例day;day=WeekDay.Sunday;Console.WriteLine(day的值是0,day);引用類型 nC#中的另一大數(shù)據(jù)類型是引用類型?!耙谩钡暮x是:該類型的變量不直接存儲所包含的值,而是存儲所要存儲值的地址。nC#中的引用類型有四種:類類型類類型、數(shù)組數(shù)組類型類型、委托類型委托類型和接口類型接口類型。 nC#中預定義的引

18、用類型:System.Object、 System.String object類型 n作為類類型之一的object類型,實質(zhì)是System.Object類的別名。n可以將任何類型的數(shù)據(jù)轉(zhuǎn)化為object類型。string類型 nstring類型在.net類庫中對應的是System.String,實質(zhì)是一種數(shù)組,即字符串可看作是一個字符數(shù)組。n在聲明時要求放在一對雙引號之間 。n兩種包含轉(zhuǎn)義符的字符串形式nstring strPath = c:ASPdefault.aspx;nstring strPath = c:ASPdefault.aspx;n運算符可訪問字符串中各個字符,如:string

19、strTest = abcdefg;char x = strTest2; /x的值為cstring類型(續(xù)) n通過ToString()方法轉(zhuǎn)化為string類型string strInt = 23.ToString();n使用Parse()方法或Convert類的相應方法轉(zhuǎn)化為其它類型 int iString = Int32.Parse(1234); string strDatetime = Convert.ToString(DateTime.Now); 引用類型-類類型n類是面向?qū)ο缶幊痰幕締挝?,是一種包含數(shù)據(jù)成員、函數(shù)成員的數(shù)據(jù)結(jié)構(gòu)。n類的數(shù)據(jù)成員有域、常量和事件等。n函數(shù)成員包括方法

20、、屬性、構(gòu)造函數(shù)和析構(gòu)函數(shù)等。n類支持繼承機制,通過繼承,派生類可以擴展類的數(shù)據(jù)成員和函數(shù)成員,進而達到代碼重用和設計重用的目的。引用類型-數(shù)組類型n數(shù)組是一組類型相同的有序數(shù)據(jù)案例名稱:使用數(shù)組類型案例名稱:使用數(shù)組類型 程序名稱:程序名稱:3-10.csusing System;class test static void Main() int arr1=new int2; int arr2=new int1,2,3; /int arr2 = new int3 1, 2, 3 ; string arr3=six, is ,me; int, arr4=1,2,3,4; int, arr5=n

21、ew int3,4; for(int i=0;iarr1.Length;i+) arr1i=i*i*i; Console.WriteLine(arr10=1,i,arr1i); for (int i=0;i4;i+) for(int j=0;j3;j+) arr5j,i=i*j; Console.WriteLine(arr50,1=2,j,i,arr5j,i); 引用類型-委托類型委托可理解為指代,就是定義一種變量來指代一個函數(shù)或一個方法。程序名稱:使用委托程序名稱:使用委托程序名稱:程序名稱:3-11.csusingSystem;delegateintmydelegate();/聲明clas

22、smyclasspublicintInstMethod()Console.WriteLine(CalltheInstMethod.);return0;classTeststaticpublicvoidMain()myclassp=newmyclass();mydelegated=newmydelegate(p.InstMethod);/實例化d();/調(diào)用,指代p.InstMethod引用類型-接口類型n接口常用來描述組件對外能提供的服務。n接口中不能定義數(shù)據(jù),只能定義方法、屬性、事件等。n包含在接口中的方法不定義具體實現(xiàn),而是在接口的繼承類中實現(xiàn)。interfaceifacevoidshow

23、myface();n參見例interface.cs 、3-12.cs、3-12_1.cs3.3 操作符與控制語句 n表達式由操作符和操作數(shù)來構(gòu)造。n表達式的操作符指示出對操作數(shù)采取哪種操作。操作符的例子包括+、-、*、/和new等。操作數(shù)的例子包括文字、域、局部變量和表達式。n有三種類型的操作符:n一元操作符。一元操作符有一個操作數(shù),包括+(一元加 )、-(一元減)、!(邏輯非)、(按位求補)、+(一元遞增)、-(一元遞減)、type(強制類型轉(zhuǎn)換)。n二元操作符。二元操作符有兩個操作數(shù)并且使用中間符號(例如x + y)包括算術(shù)操作符、位操作符、關(guān)系運算符、邏輯操作符等。n三元操作符。只有一個

24、條件操作符?:。三元操作符有三個操作數(shù)并且使用中間符號 (c? x: y)。算術(shù)操作符 n算術(shù)操作符包括基本算術(shù)操作符、一元遞增( + )和一元遞減( - )操作符。n基本算術(shù)操作符包括+(加)、-(減)、*(乘)、 /(除) 、%(取余)。案例名稱:使用算術(shù)操作符案例名稱:使用算術(shù)操作符程序名稱:程序名稱:3-13.csusingSystem;enumWeekdaySunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday;classteststaticvoidMain()stringmystr1=你好!;stringmystr2=小劉;

25、stringmystr3=mystr1+mystr2;Weekdayd1=Weekday.Sunday;Weekdayd2=d1+3;Console.WriteLine(d1=0,d2=1,d1,d2);Console.WriteLine(mystr3);賦值操作符 n賦值就是給一個變量傳一個新的值。在C#中,賦值分為簡單賦值和復合賦值兩大類。n操作符“=”是簡單賦值操作符號。n復合賦值操作符號包括+=、-=、*=、/=、%=、&= (按位與) 、|=(按位或)、=(按位異或)、=(右移位) 。邏輯操作符 nC#提供的邏輯運算符有三個,就是邏輯與(&)、邏輯或(|)和邏輯非(!

26、)。n其中,邏輯與和邏輯或是二元操作符,要求有兩個操作數(shù);而邏輯非是一元操作符,只要求一個操作數(shù)。關(guān)系操作符 n關(guān)系操作符包括=、!=、=。 n其中,、=操作符適用于整數(shù)類型、實數(shù)類型;=和!=操作符適用于整數(shù)類型、實數(shù)類型、布爾類型、枚舉類型、字符串類型、引用類型。分支語句n分支語句依據(jù)一個控制表達式的值,從一系列可能被執(zhí)行的語句選擇出要執(zhí)行的語句。n包括兩種語句:if語句和switch語句。使用使用if語句語句案例名稱:使用案例名稱:使用if語句語句程序名稱:程序名稱:3-14.csusingSystem;classHellopublicstaticvoidMain()Console.Wr

27、ite(請輸入你的名字:);stringstr_userName=Console.ReadLine();if(str_userName=six)Console.WriteLine(您好!0,是您??!,str_userName);elseConsole.WriteLine(0是誰?,str_userName);switch語句 案例名稱:使用案例名稱:使用switch語句語句程序名稱:程序名稱:3-15.csusingSystem;classSamplepublicstaticvoidMain()intmyage=10;stringmystr;switch(myage)case10:mystr=

28、他是學生!;break;case25:mystr=他是老師!;break;default:mystr=都不是!;break;Console.WriteLine(是的,0,mystr);循環(huán)語句 n在 C# 中可使用循環(huán)語句有4種格式:ndo-while:當(或直到)條件為 true 時循環(huán)。 nwhile:當條件為 true 時循環(huán)。 nfor:指定循環(huán)次數(shù),使用計數(shù)器重復運行語句。 nforeach:對于集合中的每項或數(shù)組中的每個元素,重復執(zhí)行。do-while循環(huán) 案例名稱:案例名稱:do-while循環(huán)循環(huán)程序名稱:程序名稱:3-16.csusingSystem;classtestpub

29、licstaticvoidMain()intsum=0;/初始值設置為0inti=1;/加數(shù)初始值為1dosum+=i;i+;while(i=100);Console.WriteLine(從0到100的和是0,sum);While循環(huán) 案例名稱:使用案例名稱:使用while語句語句程序名稱:程序名稱:3-17.csusingSystem;classSamplepublicstaticvoidMain()intsum=0;inti=1;while(i=100)sum+=i;i+;Console.WriteLine(從0到100的和是0,sum);for循環(huán) usingSystem;classte

30、stpublicstaticvoidMain()intsum=0;for(inti=1;i100)break;sum+=j;j+;Console.WriteLine(從0到100的和是0,sum);foreach循環(huán) usingSystem;publicclassforeachapppublicstaticvoidMain()intodd=0,even=0;intarr=newint0,1,2,5,7,8,11;foreach(intiinarr)if(i%2=0)even+;elseodd+;Console.WriteLine(even);Console.WriteLine(odd);跳轉(zhuǎn)語

31、句 n跳轉(zhuǎn)語句進行無條件跳轉(zhuǎn)。n常用的跳轉(zhuǎn)語句:break語句和continue語句。 break語句nbreak語句跳出包含它的switch,while,do,for,或foreach語句。假如break不是在switch,while,do,for或者foreach語句的塊中,將會發(fā)生編譯錯誤。 案例名稱:使用案例名稱:使用break語句語句程序名稱:程序名稱:3-19.csusing System;class test public static void Main() int sum=0; int i=1; while (true) sum+=i; i+; if (i100) break

32、; / 如果如果i大于大于100,則退出循環(huán)則退出循環(huán) Console.WriteLine(從從0到到100的和是的和是0,sum); 案例名稱:使用案例名稱:使用continue語句語句程序名稱:程序名稱:3-20.csusing System;class test public static void Main() for(int n=100;n=200;n+) if(n%3=0) continue; Console.WriteLine(從100到200的不能被3整除的數(shù)是0,n); continue語句 ncontinue語句的功能是結(jié)束本次循環(huán),繼續(xù)下一次循環(huán),但并不退出循環(huán)體。3.4

33、 異常處理 nC#的異??赡苡蓛煞N方式導致:nthrow語句無條件拋出異常。nC#語句和表達式執(zhí)行過程中激發(fā)了某個異常的條件,使得操作無法正常結(jié)束,從而引發(fā)異常。例如整數(shù)除法操作分母為零時將拋出一個異常。n異常由try語句來處理,try語句提供了一種機制來捕捉執(zhí)行過程中發(fā)生的異常。Try語句有3種基本格式:ntry-catchntry-finallyntry-catch-finallytry-catch結(jié)構(gòu) 案例名稱:使用案例名稱:使用try-catch語句語句程序名稱:程序名稱:3-21.csusingSystem;classSamplepublicstaticvoidMain(string

34、args)longfactorial=1;longnum=Int64.Parse(args0);trychecked/啟用溢出檢查,不讓溢出,報出異常/計算數(shù)num的階乘for(longcur=1;cur=num;cur+)factorial*=cur;catch(OverflowExceptionoe)Console.WriteLine(計算0的階乘時引發(fā)溢出異常,num);Console.WriteLine(0,oe.Message);return;Console.WriteLine(0的階乘是1,num,factorial);try-finally結(jié)構(gòu) n不管try子句是如何退出的,但程

35、序的控制權(quán)最后都會轉(zhuǎn)移到finally子句執(zhí)行。案例名稱:使用案例名稱:使用try-finally語句語句程序名稱:程序名稱:3-22.csusingSystem;publicclassSamplepublicstaticvoidMain()tryConsole.WriteLine(執(zhí)行try子句!);gotoleave;/跳轉(zhuǎn)到leave標簽finallyConsole.WriteLine(執(zhí)行finally子句!);leave:Console.WriteLine(執(zhí)行l(wèi)eave標簽!);try-catch-finally結(jié)構(gòu) ntry子句后跟一個或多個catch子句及一個finally子句

36、。案例名稱:使用案例名稱:使用try-catch-finally語句語句程序名稱:程序名稱:3-23.csusingSystem;classSamplepublicstaticvoidMain()trythrow(newArgumentNullException();/引發(fā)異常catch(ArgumentNullExceptione)Console.WriteLine(Exception:0,e.Message);finallyConsole.WriteLine(執(zhí)行finally子句);3.5 C#面向?qū)ο蟪绦蛟O計基礎(chǔ) n面向?qū)ο缶幊痰闹饕枷胧菍?shù)據(jù)(數(shù)據(jù)成員)及處理這些數(shù)據(jù)的相應函數(shù)(函

37、數(shù)成員)封裝到類中,并使用類的實例(類的實例稱為對象)進行計算。n與傳統(tǒng)的面向過程的編程方法相比,面向?qū)ο缶幊谭椒ㄓ幸韵聝?yōu)點:n程序的可維護性好;n對象可以多次使用,可重用性好。 類的定義 classAclassBvoidf()Aa=newA();n類具有封裝性、繼承性和多態(tài)性的特點。n類創(chuàng)建完后,使用new關(guān)鍵字可建立類的實例對象。n類的修飾符主要有訪問修飾符、abstract、static、sealed、partial。n類的成員修飾符主要有訪問修飾符、abstract、static、sealed、virtual、override、readonly、const 類的常識類或成員的訪問修飾符

38、 npublic:訪問不受限制,任何地方都可訪問。ninternal:允許同一程序集中的應用程序可以訪問。nprotected:在所屬的類或派生類中能被訪問。nprotected internal:允許同一程序集中的應用程序可以訪問、所屬類或派生類中能被訪問。nprivate:在所屬的類中能被訪問。使用訪問修飾符 案例名稱:使用訪問修飾符案例名稱:使用訪問修飾符 程序名稱:程序名稱:3-25.csusingSystem;classClass1publicstrings;/公有成員protectedinti;/保護成員privatedoubled;/私有成員publicvoidF1()s=Wel

39、comesix!;/正確,允許訪問自身成員i=100;/正確,允許訪問自身成員d=18.68;/正確,允許訪問自身成員publicstaticvoidMain()Class1a=newClass1();a.s=six;Console.WriteLine(0,a.s); nabstract:修飾類的時候表示該類為抽象類,不能夠創(chuàng)建該類的實例。修飾方法的時候表示該方法需要由子類來實現(xiàn);含有抽象方法的類一定是抽象類。nstatic:修飾類時表示該類為靜態(tài)類,該類不能被實例化,該類所有成員都為靜態(tài)的;修飾類成員時,只能通過【類.成員名】的方式訪問。nsealed:修飾類時表示該類不能夠被繼承,修飾方法

40、時表示該方法不能被覆寫。npartial:可以將類的定義拆分到兩個或多個源文件中。每個源文件包含定義的一部分,當編譯應用程序時.NETFramework會將所有部分組合起來形成一個類。類或成員的其他修飾符nvirtual:修飾方法成員,表示虛方法。父類可以含有該類的實現(xiàn),子類可以覆寫該方法。noverride:表示該方法覆寫了父類的方法。nreadonly:修飾字段,表示該字段為只讀字段,是運行時只讀,內(nèi)容在運行時確定。 nconst:修飾字段,表示該字段為只讀字段,且在編譯時必須明確該字段的值。 類或成員的其他修飾符(續(xù))類的屬性 案例名稱:使用屬性案例名稱:使用屬性usingSystem;

41、classTimePeriodprivatedoubleseconds;publicdoubleHoursgetreturnseconds;setseconds=value*3600;classProgramstaticvoidMain()TimePeriodt=newTimePeriod();t.Hours=24;Console.WriteLine(共有+t.Hours+秒);使用繼承使用繼承n繼承是使用已存在的類作為基礎(chǔ)建立新類的技術(shù),新類的定義可以增加新的數(shù)據(jù)或新的功能,也可以用父類的功能。案例名稱:使用繼承案例名稱:使用繼承程序名稱:程序名稱:3-24.csusingSystem;cl

42、assBaseApublicvoidFuncA()System.Console.WriteLine(FuncitonA);classDerivedA:BaseApublicvoidFuncB()System.Console.WriteLine(FunctionB);classTesterpublicstaticvoidMain(stringargs)DerivedAaDerived=newDerivedA();aDerived.FuncA();aDerived.FuncB();構(gòu)造函數(shù)和析構(gòu)函數(shù) n構(gòu)造函數(shù)用于實現(xiàn)類的實例的初始化。每個類都有構(gòu)造函數(shù),即使沒有聲明它,編譯器也會自動提供一個默認

43、的構(gòu)造函數(shù)。n當創(chuàng)建一個對象的時候,自動調(diào)用構(gòu)造函數(shù),執(zhí)行其中語句。n使用構(gòu)造函數(shù)請注意以下幾個問題:n一個類的構(gòu)造函數(shù)通常與類名相同n構(gòu)造函數(shù)不聲明返回類型,也不能定義為voidn構(gòu)造函數(shù)一般都是public類型,如果是private表明該類不能被實例化n析構(gòu)函數(shù)當銷毀這個類的時候調(diào)用,用來釋放創(chuàng)建類所占有的資源。當對象脫離其作用域時(例如對象所在的 函數(shù)已調(diào)用完畢),系統(tǒng)自動調(diào)用析構(gòu)函數(shù)。舉例:構(gòu)造函數(shù)和析構(gòu)函數(shù)案例名稱:構(gòu)造函數(shù)和析構(gòu)函數(shù)案例名稱:構(gòu)造函數(shù)和析構(gòu)函數(shù)程序名稱:程序名稱:3-26.csusingSystem;classDesk/構(gòu)造函數(shù)和類名一樣,析構(gòu)函數(shù)前面加public

44、Desk()Console.WriteLine(ConstructingDesk);weight=6;high=3;width=7;length=10;Console.WriteLine(0,1,2,3,weight,high,width,length);Desk()Console.WriteLine(DestructingDesk);protectedintweight;protectedinthigh;protectedintwidth;protectedintlength;publicstaticvoidMain()Deskaa=newDesk();Console.WriteLine(b

45、ackinmain();構(gòu)造函數(shù)和繼承n構(gòu)造函數(shù)和析構(gòu)函數(shù)不能被繼承,只能被調(diào)用。案例名稱:構(gòu)造函數(shù)和繼承案例名稱:構(gòu)造函數(shù)和繼承usingSystem;classBaseClasspublicBaseClass(intx,inty)intresult=x+y;Console.WriteLine(基類構(gòu)造函數(shù)中的內(nèi)容:0+1=2,x,y,result);classDerivedClass:BaseClasspublicDerivedClass(intx,inty):base(x,y)intresult=x*y;Console.WriteLine(派生類構(gòu)造函數(shù)中的內(nèi)容:0*1=2,x,y,re

46、sult);classProgramstaticvoidMain(stringargs)DerivedClassdc=newDerivedClass(5,6);this關(guān)鍵字 nThis關(guān)鍵字僅局限在構(gòu)造函數(shù)、類的方法中使用。n在類的構(gòu)造函數(shù)中出現(xiàn)的this表示對正在構(gòu)造的對象本身的引用;在類的方法中出現(xiàn)this表示對引用該方法的對象的引用。n在結(jié)構(gòu)的構(gòu)造函數(shù)中出現(xiàn)的this表示對正在構(gòu)造的結(jié)構(gòu)的引用;在結(jié)構(gòu)的方法中出現(xiàn)this表示對調(diào)用該方法的結(jié)構(gòu)的引用。n除此以外,其他的地方使用this關(guān)鍵字都是非法的。使用this關(guān)鍵字案例名稱:使用案例名稱:使用this關(guān)鍵字關(guān)鍵字 程序名稱:程序名稱

47、:3-27.csusingSystem;publicclassEmployeepublicstringname;/員工姓名publicdecimalsalary;/員工薪水/構(gòu)造函數(shù)publicEmployee(stringname,decimalsalary)/用this關(guān)鍵字給正在構(gòu)造的對象的name和salary賦值=name;this.salary=salary;/顯示員工姓名及薪水publicvoidDisplayEmployee()Console.WriteLine(姓名:0,name);Console.WriteLine(薪水:0元,salary);/用this

48、方法將當前對象傳給Tax.CalcTax()方法Console.WriteLine(個人所得稅:0元,Tax.CalcTax(this);publicclassTaxpublicstaticdecimalCalcTax(EmployeeE)return(0.14m*(E.salary-800.0m);publicclassSamplepublicstaticvoidMain()/聲明類Employee的實例eEmployeee=newEmployee(小劉,4123.6m);e.DisplayEmployee();/顯示員工姓名和薪水關(guān)鍵字static n在類中聲明變量和方法時,可使用stat

49、ic作為修飾符。static標記的變量由整個類共享,訪問時直接使用類名加.。案例名稱:使用案例名稱:使用static關(guān)鍵字關(guān)鍵字 程序名稱:程序名稱:3-28.cs usingSystem;publicclassPersonprivateintid;publicstaticinttotal=0;publicPerson()total+;id=total;publicclassOtherClasspublicstaticvoidMain()Person.total=100;Console.WriteLine(Person.total);Personc=newPerson();Console.Wr

50、iteLine(Person.total);/c.tota?使用靜態(tài)方法案例名稱:使用靜態(tài)方法案例名稱:使用靜態(tài)方法程序名稱:程序名稱:3-29.cs usingSystem;publicclassPersonprivateintid;privatestaticinttotal=0;publicstaticintgetTotalPerson()returntotal;publicPerson()total+;id=total;publicclassTestPersonpublicstaticvoidMain()Console.WriteLine(Person.getTotalPerson();

51、Personp1=newPerson();Console.WriteLine(Person.getTotalPerson();3.6 C#面向?qū)ο蟾呒壧匦?n和其他的面向?qū)ο笳Z言一樣,C#支持多態(tài)、虛方法、函數(shù)的重載等。n除此之外,C#還提供一種特殊的數(shù)據(jù)形態(tài)“裝箱” 多態(tài)(Polymorphism) n在C#中,多態(tài)性是指:“同一操作作用于不同的類的實例,不同的類將進行不同的解釋,最后產(chǎn)生不同的執(zhí)行結(jié)果 ” 。n例如,當從父類派生了很多子類時,由于每個子類都有其不同的代碼實現(xiàn),所以當用父類來引用這些子類時,同樣的操作可以表現(xiàn)出不同的操作結(jié)果。 實現(xiàn)多態(tài)案例名稱:實現(xiàn)多態(tài)案例名稱:實現(xiàn)多態(tài)us

52、ingSystem;interfaceAnimalSoundvoidSound();publicclassDog:AnimalSoundpublicvoidSound()Console.WriteLine(狗的叫聲為:汪汪!);publicclassCat:AnimalSoundpublicvoidSound()Console.WriteLine(貓的叫聲為:喵喵!);classStatrpublicvoidAnSound(AnimalSoundp)p.Sound();classProgramstaticvoidMain(stringargs)Statrsc=newStatr();Dogdc=

53、newDog();sc.AnSound(dc);Catcc=newCat();sc.AnSound(cc);虛方法 n類的方法前如果加上了virtual修飾符,則稱之為虛方法。使用了virtual修飾符后,不允許再有static、abstract或override修飾符。n基類中定義的普通函數(shù),在派生類中重新定義時需加new關(guān)鍵字;如果基類中定義的是虛函數(shù),在派生類中重新定義時使用override關(guān)鍵字。案例名稱:使用虛方法案例名稱:使用虛方法程序名稱:程序名稱:3-30.cs usingSystem;classTeststaticvoidMain(stringargs)Baseb=newBa

54、se();b.Draw();Derivedd=newDerived();d.Draw();d.Fill();Base obj = new Derived();obj.Fill();obj.Draw();classBasepublicvoidFill()System.Console.WriteLine(Base.Fill);publicvirtualvoidDraw()System.Console.WriteLine(Base.Draw);classDerived:BasepublicoverridevoidDraw()System.Console.WriteLine(Derived.Draw)

55、;publicnewvoidFill()System.Console.WriteLine(Derived.Fill);使用虛方法 n“Base obj = new Derived(); ”定義了基類對象obj指向派生類的實例,當調(diào)用普通方法時,總是調(diào)用基類的方法,當調(diào)用虛方法時,則調(diào)用派生類的方法。n如果利用Base類繼續(xù)派生出一些類,則“obj.Draw()”語句將會根據(jù)所給不同對象的實例調(diào)用不同的方法,從而實現(xiàn)多態(tài)性。n參見例polymorphism.cs抽象類 n抽象類使用abstract修飾符。抽象類不能直接實例化,只能被其他類繼承。n抽象方法只能聲明于抽象類中,且不包含任何實現(xiàn),在繼承類中必須對抽象類中的抽象方法進行重寫,不然該派生類依然是抽象類。n抽象類用于部分實現(xiàn)一個類,再由用戶按需求對其進行不同的擴展和完善。使用抽象類使用抽象類 案例名稱:使用抽象類案例名稱:使用抽象類 程序名稱:程序名稱:3-31.csusingSystem;abstractpublicclassWindowpublicWindow(inttop,intleft)this.top=top;this.left=left;Console.WriteLine(

溫馨提示

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

評論

0/150

提交評論