《C#.net程序設(shè)計(jì)課件》課件-第二章 數(shù)據(jù)類型、變量和表達(dá)式_第1頁(yè)
《C#.net程序設(shè)計(jì)課件》課件-第二章 數(shù)據(jù)類型、變量和表達(dá)式_第2頁(yè)
《C#.net程序設(shè)計(jì)課件》課件-第二章 數(shù)據(jù)類型、變量和表達(dá)式_第3頁(yè)
《C#.net程序設(shè)計(jì)課件》課件-第二章 數(shù)據(jù)類型、變量和表達(dá)式_第4頁(yè)
《C#.net程序設(shè)計(jì)課件》課件-第二章 數(shù)據(jù)類型、變量和表達(dá)式_第5頁(yè)
已閱讀5頁(yè),還剩58頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第二章

數(shù)據(jù)類型、變量和表達(dá)式C#.net程序設(shè)計(jì)本章主要內(nèi)容值類型(整數(shù)類型,布爾類型,字符類型,實(shí)數(shù)類型,枚舉類型,結(jié)構(gòu)類型)引用類型(類,數(shù)組,Delegate委托,interface接口)類型轉(zhuǎn)換(隱式類型轉(zhuǎn)換,顯式類型轉(zhuǎn)換)和Convert類裝箱和拆箱變量和常量表達(dá)式和操作符值類型值類型可以分為簡(jiǎn)單類型、結(jié)構(gòu)類型和枚舉類型。簡(jiǎn)單類型又可分為整數(shù)類型、布爾類型、字符類型和實(shí)數(shù)類型。整數(shù)、實(shí)數(shù)、字符和布爾類型整數(shù)類型:sbyte、byte、short、ushort、int、uint、long、ulong和char。布爾類型bool:表示的邏輯變量,只有兩種取值:“真”或“假”,采用“true”和“false”兩個(gè)值來表示。字符類型包括數(shù)字字符、英文字母和表達(dá)符號(hào)等。實(shí)數(shù)類型包括浮點(diǎn)類型和十進(jìn)制類型:浮點(diǎn)類型包括單精度類型(float)型和雙精度類型(double)。十進(jìn)制類型(decimal):十進(jìn)制類型適合應(yīng)用在不能接受舍入誤差的計(jì)算中。值類型C#內(nèi)置類型.NET類型.描述boolSystem.Boolean該類型僅有兩個(gè)可能取值:true和false。例如,boolblnA=true;默認(rèn)值為false。byteSystem.Byte表示無符號(hào)8位整數(shù),取值范圍:0~255。例如,bytebyteA=255;默認(rèn)值為0。sbyteSystem.SByte表示8位整數(shù),取值范圍:-128到127。默認(rèn)值為0。charSystem.Char表示一個(gè)Unicode字符(16位),取值:U+0000~U+FFFF??梢圆捎枚喾N不同的賦值格式,例如下面的語(yǔ)句。charMyChar=‘X’;charMyChar=’\x0058’;charMyChar=(char)88;charMyChar=’\u0058’;默認(rèn)值為”\0”decimalSystem.Decimal表示一個(gè)128位的數(shù)值,取值范圍:±1.0e-28~±7.9e28,精確度:28~29位小數(shù)。例如,decimalMyMoney=100.5m;后綴m或M表示decimal數(shù)值,如果沒有這個(gè)后綴,則該數(shù)值被認(rèn)為是double數(shù)值。默認(rèn)值為0.0M。doubleSystem.Double表示一個(gè)64位浮點(diǎn)數(shù),取值范圍:±5.0e-324~±1.7e308;精度:15~16位小數(shù)。默認(rèn)值為0.0D(D或d為double類型的后綴)floatSystem.Single表示一個(gè)32位浮點(diǎn)數(shù),取值范圍:±1.5e-45~±3.4e38,精度:7位小數(shù)。默認(rèn)值為0.0F。intSystem.Int32表示一個(gè)32位整數(shù),取值范圍:-2147483648~2147483647,默認(rèn)值為0。uintSystem.UInt32表示一個(gè)32位無符號(hào)整數(shù),取值范圍0~4294967295。默認(rèn)值為0。longSystem.Int64表示一個(gè)64位整數(shù),取值范圍:-9223372036854775808~9223372036854775807。默認(rèn)值為0。ulongSystem.UInt64表示一個(gè)64位無符號(hào)整數(shù),取值范圍:0~18446744073709551615。默認(rèn)值為0。shortSystem.Int16表示一個(gè)16位整數(shù),取值范圍:-32768~32767。默認(rèn)值為0。ushortSystem.UInt16表示一個(gè)16位無符號(hào)整數(shù),取值范圍:0~65535。默認(rèn)值為0。結(jié)構(gòu)類型

把一系列相關(guān)的變量組織成為一個(gè)單一實(shí)體的類型稱為結(jié)構(gòu)類型,每一個(gè)變量稱為結(jié)構(gòu)的成員。例如將一個(gè)點(diǎn)的x坐標(biāo)和y坐標(biāo)組成一個(gè)點(diǎn)結(jié)構(gòu)類型。結(jié)構(gòu)是使用struct關(guān)鍵字定義的,定義一個(gè)點(diǎn)結(jié)構(gòu)類型point的代碼如下:structpoint{publicintx,y;//定義字段

publicpoint(intp1,intp2)//定義構(gòu)造函數(shù)

{x=p1;y=p2;

}}值類型結(jié)構(gòu)的默認(rèn)構(gòu)造函數(shù)系統(tǒng)自動(dòng)生成結(jié)構(gòu)的默認(rèn)構(gòu)造函數(shù)(不帶參數(shù)的構(gòu)造函數(shù)),不能手工定義,默認(rèn)構(gòu)造函數(shù)對(duì)結(jié)構(gòu)的所有成員賦予其類型的默認(rèn)值。對(duì)point系統(tǒng)自動(dòng)生成如下默認(rèn)構(gòu)造函數(shù)。

publicpoint(){x=0;y=0;

}值類型創(chuàng)建結(jié)構(gòu)實(shí)例的三種方法:pointa;//第一種:沒使用new未初始,不使用構(gòu)造函數(shù)。a不賦值不能使用

a.x=3; a.y=4;pointb=newpoint(3,4);//第二種:使用用戶定義構(gòu)造函數(shù)pointc=newpoint();//第三種:使用默認(rèn)構(gòu)造函數(shù)c.x=0,c.y=0Console.WriteLine("{0},{1}",b.x,b.y);值類型枚舉類型枚舉(enum)類型由一組命名常數(shù)組成,這組命名常數(shù)稱為枚舉列表;每一個(gè)枚舉類型都具有一個(gè)底層基本類型。底層基本類型必須是內(nèi)置的有符號(hào)或無符號(hào)整數(shù)類型(如Int16、Int32或Int64)。枚舉元素的默認(rèn)類型為int,并且在默認(rèn)情況下,第1個(gè)元素的值為0,后續(xù)的元素依次遞增1。例如,在下面的枚舉變量color中,Red=0、Green=1,依次類推。enumcolor{Red,Green,Blue,White,Black};在聲明枚舉變量時(shí)還可以指定底層的基本類型,例如下面的語(yǔ)句,指定long為底層的基本類型。enumRange:long{Max=2147483648L,Min=255L};值類型//指定枚舉的底層類型為long,并為枚舉的各個(gè)元素指定值[Flags]//表示該枚舉可以進(jìn)行|或運(yùn)算組合enumRange:long{Min=255L,MinNext,Max=2147483648L};publicclassEnumTest//使用長(zhǎng)整數(shù)枚舉{publicstaticvoidMain(){Rangea=Range.Min|Range.MinNext;longx=(long)Range.Max;longy=(long)Range.Min;longz=(long)Range.MinNext;Console.WriteLine("Max={0},Min={1},{2}={3}",x,y,Range.MinNext,z);Console.WriteLine("Max={0},Min={1}",a.ToString("D"),a.ToString("G"));Console.WriteLine(a.ToString());//如果沒有[Flags],這行只能顯示數(shù)字

}//a.ToString("D")是顯示數(shù)字,以上其他方式均顯示元素名}引用類型C#中的另一大數(shù)據(jù)類型是引用類型,引用類型的變量不直接存儲(chǔ)所包含的值而是存儲(chǔ)值的地址。C#中的引用類型有四種:類、數(shù)組、委托、和接口?;谥殿愋偷淖兞恐苯影?。將一個(gè)值類型變量賦給另一個(gè)值類型變量時(shí),將復(fù)制包含的值。這與引用類型變量的賦值不同,引用類型變量的賦值只復(fù)制對(duì)象的引用,即存儲(chǔ)對(duì)象的位置指針。而不復(fù)制對(duì)象本身。類類:是對(duì)一系列具有相同性質(zhì)的對(duì)象的抽象,是對(duì)對(duì)象共同特征的描述,比如每一個(gè)人是一個(gè)對(duì)象,所有的人可以作為一個(gè)模板,我們就定義人這個(gè)類。下面Person類的代碼:引用類型

publicclassPerson { stringname;//私有字段

intage; publicstringName{//屬性 get{returnname;} set{name=value;} } publicintAge{ get{returnage;} set{age=value;} } publicPerson(stringpersonName,intpersonAge){//構(gòu)造函數(shù) name=personName; age=personAge; } publicvoidShow(){//方法

Console.WriteLine("名字:{0},年齡:{1}",name,age); } }類引用類型類可以包含數(shù)據(jù)成員(常數(shù)、字段、和事件)和方法成員(方法、屬性、索引、操作符、構(gòu)造函數(shù)和析構(gòu)函數(shù)),Person類包含字段name和age,分別用來表示姓名和年齡,字段一般是在類的內(nèi)部使用,如在Person類的Show方法使用。Person類包含兩個(gè)屬性Name和Age,用于封裝字段name和age,屬性是對(duì)外公開的,可以從外部調(diào)用類的實(shí)例的屬性。在一個(gè)類中每個(gè)對(duì)象都是類的實(shí)例,對(duì)象是在C#中使用new操作符建立一個(gè)類的實(shí)例。下面是在類Program的入口函數(shù)中創(chuàng)建一個(gè)Person對(duì)象實(shí)例person1,在類Program中只能調(diào)用person1的屬性而不能調(diào)用person1的私有字段。類Program代碼如下:classProgram {staticvoidMain(string[]args){ Personperson1=newPerson("劉",21); Console.WriteLine("名字:{0},年齡:{1}", person1.Name,person1.Age); person1.Name="劉洪"; person1.Age=25; person1.Show();//調(diào)用Person實(shí)例person1的方法.show()}}

classTest{staticvoidMain()//程序運(yùn)行入口主函數(shù)

{doubler;//聲明局部變量

Console.WriteLine("請(qǐng)輸入圓半徑:");stringstrInput=Console.ReadLine();//調(diào)用類Console靜態(tài)方法

r=double.Parse(strInput);//字符串類型轉(zhuǎn)為實(shí)數(shù)double類型

MyCircleaCircle=newMyCircle(r);//創(chuàng)建MyCircle對(duì)象(實(shí)例)//通過實(shí)例調(diào)用計(jì)算圓面積實(shí)例方法

doubleaArea=aCircle.CircleArea();Console.WriteLine("半徑{0}的面積={1}",r,aArea);//通過MyCircle類調(diào)用計(jì)算圓面積靜態(tài)方法

aArea=MyCircle.StaticCircleArea(r);Console.WriteLine("半徑{0}的面積={1}",r,aArea);}}}//下面是從Person類繼承的學(xué)生Student類的定義代碼:publicclassStudent:Person { privatestringschool; publicStudent(stringstudentName,intstudentAge,stringschoolName)//構(gòu)造函數(shù)

:base(studentName,studentAge)//調(diào)用Person構(gòu)造函數(shù)

{ school=schoolName; } publicstringSchool//屬性

{ get{returnschool;} set{school=value;} } newpublicvoidShow()//與基類方法同名,需要使用new關(guān)鍵字

{ Console.WriteLine("名字:{0},年齡:{1},學(xué)校:{2}",Name,Age,school); }}類以上代碼有以下兩點(diǎn)需要說明:publicclassStudent:Person{}表示Student類從Person繼承,Person是基類,Student類是Person基類的派生類。Student類的構(gòu)造函數(shù)使用

:base(studentName,studentAge)表示調(diào)用基類Person的構(gòu)造函數(shù)。以下是Program的入口函數(shù)中創(chuàng)建Student類實(shí)例和使用實(shí)例Show方法的代碼:Studentstudent1=newStudent("zhang",20,"CollegeA");student1.Show();//調(diào)用學(xué)生實(shí)例student1的方法.show()引用類型數(shù)組數(shù)組是一組類型相同的有序數(shù)據(jù)。數(shù)組可以是一維的,也可以是多維或不規(guī)則的數(shù)組。數(shù)組的聲明格式:type[]arrayName;比如一維數(shù)組:string[]a1;二維數(shù)組:string[,]a2;可變數(shù)組:string[][]j2。在C#中,數(shù)組實(shí)際上是對(duì)象,而不只是像C和C++中那樣的可尋址連續(xù)內(nèi)存區(qū)域。System.Array類型是所有數(shù)組類型的抽象基類型。數(shù)組可以使用System.Array具有的屬性以及其他成員,如使用Length屬性來獲取數(shù)組的長(zhǎng)度。一維數(shù)組的實(shí)例:int[]arr=newint[5];其中arr是整型數(shù)組,元素個(gè)數(shù)為5,數(shù)組的元素個(gè)數(shù)通過數(shù)組名加圓點(diǎn)加Length獲得,如arr.Length是5,arr[0],arr[1],arr[2],arr[3],arr[4]分別代表arr數(shù)組的5個(gè)元素,數(shù)組的索引是從0開始,直到4(數(shù)組長(zhǎng)度-1)。引用類型數(shù)組聲明及初始化不同方法:int[]array1=newint[5]{1,3,5,7,9};int[]array2={0,2,4,6,8};int[]array3;array3=newint[]{1,2,3};//正確的表示//array3={5,7,9};//錯(cuò)誤的表示ArraymyIntArray=Array.CreateInstance(typeof(System.Int32),5);//CreateInstance動(dòng)態(tài)創(chuàng)建數(shù)組相當(dāng)System.Int32myIntArray=newSystem.Int32[5];引用類型Array類的實(shí)例方法CopyTo

Array類的實(shí)例方法voidCopyTo(Arrayarray,intindex)將當(dāng)前一維數(shù)組的所有元素復(fù)制到指定的一維數(shù)組中(從指定的目標(biāo)數(shù)組索引index開始)。例如:string[]mySourceArray={"three","napping","cats","in","the","barn",three","napping","cats","in","the","barn"};string[]myTargetArray=newstring[15];mySourceArray.CopyTo(myTargetArray,6);//數(shù)組復(fù)制引用類型Array類的靜態(tài)Copy方法Array類的靜態(tài)Copy方法有多個(gè)不同參數(shù)的重載,其中voidCopy(ArraysourceArray,intsourceIndex,ArraydestinationArray, intdestinationIndex,intlength),參數(shù)含義如下:sourceArray包含要復(fù)制的數(shù)據(jù)數(shù)組。sourceIndex表示sourceArray中復(fù)制的起始索引。 destinationArray接收數(shù)據(jù)數(shù)組。destinationIndex表示destinationArray中存儲(chǔ)的起始索引 length表示要復(fù)制的元素?cái)?shù)目。ArraymyIntArray=Array.CreateInstance(typeof(System.Int32),5);myIntArray[0]=13;ArraymyObjArray=Array.CreateInstance(typeof(System.Object),5);Array.Copy(myIntArray,0,myObjArray,0,1);//復(fù)制myIntArray[0]到myObjArray[0]引用類型Delegate(委托)Delegate(“代表”或“委托”)是一種指向一個(gè)類的靜態(tài)方法或一個(gè)實(shí)例方法的數(shù)據(jù)結(jié)構(gòu)。委托實(shí)際上相當(dāng)于方法指針。一旦為委托分配了方法,委托將與該方法具有完全相同的行為。定義和使用委托分為三步:聲明、實(shí)例化和調(diào)用。委托方法的使用可以像其他任何方法一樣,具有參數(shù)和返回值。引用類型委托聲明、實(shí)例化和調(diào)用委托聲明,例如聲明一個(gè)名為CalVolumnDel的委托:publicdelegatedoubleCalVolumnDel(doubler);委托實(shí)例化,構(gòu)造委托對(duì)象時(shí),通常提供委托的是方法的名稱,該方法的參數(shù)及返回都必須與委托聲明一致。例如:staticdoubleCalHalfBall(doubledblR){ doubledblVol=2.0/3.0*dblR*dblR*dblR;returndblVol;}可以使用以下兩種方式實(shí)例化委托:CalVolumnDeldel=newCalVolumnDel(CalHalfBall);CalVolumnDeldel=CalHalfBall;//與上句等效委托調(diào)用,調(diào)用委托實(shí)例del計(jì)算半球體積:vol=del(r);//等同于:vol=CalHalfBall(r);引用類型使用委托計(jì)算以圓為基礎(chǔ)的各種形體的體積的應(yīng)用程序代碼:publicdelegatedoubleCalVolumnDel(doubler);//計(jì)算體積委托 classTest{doubleCalCylinder(doubledblR)//高為圓截面半徑的圓柱體積

{doubledblVol=Math.PI*dblR*dblR*dblR;returndblVol;}staticdoubleCalHalfBall(doubledblR)//半徑為dblR的半球體積

{doubledblVol=2.0/3.0*Math.PI*dblR*dblR*dblR;returndblVol;}

staticvoidMain(string[]args)//程序運(yùn)行入口主函數(shù)

{doubler;//聲明局部變量半徑

doublevol;//聲明局部變量體積

Console.WriteLine("請(qǐng)輸入圓半徑:");stringstrInput=Console.ReadLine();//調(diào)用類Console靜態(tài)方法

r=double.Parse(strInput);//字符串類型轉(zhuǎn)為實(shí)數(shù)double類型

CalVolumnDeldel=newCalVolumnDel(CalHalfBall);///CalVolumnDeldel=CalHalfBall;與上句等效

vol=del(r);//調(diào)用實(shí)例委托計(jì)算半球體積

Console.WriteLine("半徑{0}的半球體體積={1}",r,vol);TestmyTest=newTest();del=myTest.CalCylinder;vol=del(r);//調(diào)用實(shí)例委托計(jì)算高為圓截面半徑的圓柱體積

Console.WriteLine("半徑,高為{0}的圓柱體積={1}",r,vol);}}interface接口引用類型和類一樣,接口也定義了一系列方法成員。但與類不同的是,接口并不提供方法的實(shí)現(xiàn)。接口定義的方法由繼承接口的類或結(jié)構(gòu)來實(shí)現(xiàn)。接口可以包含一個(gè)和多個(gè)成員,這些成員只能是方法、屬性、索引指示器和事件,而且不能包含任何靜態(tài)成員,接口成員一定是公共的。接口是使用interface

關(guān)鍵字定義的。下面的代碼定義接口Idimensions。interfaceIDimensions//定義接口{floatLength();floatWidth();}下面是使用接口作為方法的參數(shù)傳遞的例子,計(jì)算以圓為基礎(chǔ)的各種形體體積interfaceICalVol{doubleCalVolumn(doubler);}classMyCircle{doublecircleR;//字段半徑

publicMyCircle(doubledblR)//構(gòu)造函數(shù)

{circleR=dblR;//初始化字段半徑

}publicdoubleShapeVolumn(ICalVolIcal){//計(jì)算以圓為基礎(chǔ)的各種形體的體積doubledblVol=Ical.CalVolumn(circleR); //使用委托計(jì)算圓為基礎(chǔ)形狀體積

returndblVol;}}classTest:ICalVol{//Test類繼承IcalVol接口

publicdoubleCalVolumn(doubledblR){//實(shí)現(xiàn)IcalVol接口方法

doubledblVol=4.0/3.0*dblR*dblR*dblR;returndblVol;}staticvoidMain(string[]args){//程序運(yùn)行入口主函數(shù)

doubler;//聲明局部變量圓半徑

doublevol;//聲明局部變量體積

Console.WriteLine("請(qǐng)輸入圓半徑:");stringstrInput=Console.ReadLine();//調(diào)用類Console靜態(tài)方法

r=double.Parse(strInput);//字符串類型轉(zhuǎn)為實(shí)數(shù)double類型

MyCircleaCircle=newMyCircle(r);//創(chuàng)建MyCircle對(duì)象(實(shí)例)TestmyTest=newTest();//使用默認(rèn)構(gòu)造函數(shù)創(chuàng)建Test對(duì)象/*myTest隱式轉(zhuǎn)化為IcalVol接口,通過接口調(diào)用CalVolumn方法實(shí)際是調(diào)用myTest對(duì)象的計(jì)算球體積CalVolumn方法*/vol=aCircle.ShapeVolumn(myTest);Console.WriteLine("半徑{0}的半球體體積={1}",r,vol);}}類型轉(zhuǎn)換數(shù)據(jù)類型的轉(zhuǎn)換可以分為兩類隱式轉(zhuǎn)換和顯式轉(zhuǎn)換。隱式轉(zhuǎn)換就是系統(tǒng)默認(rèn)的,不需要加以聲明就能夠安全地執(zhí)行的轉(zhuǎn)換。隱式轉(zhuǎn)換的規(guī)則有三種:隱式數(shù)值轉(zhuǎn)換、隱式枚舉轉(zhuǎn)換和隱式引用轉(zhuǎn)換。顯式類型轉(zhuǎn)換又叫強(qiáng)制類型轉(zhuǎn)換,與隱式轉(zhuǎn)換正好相反,顯式轉(zhuǎn)換需要用戶明確地指定轉(zhuǎn)換的類型。隱式數(shù)值轉(zhuǎn)換隱式數(shù)值轉(zhuǎn)換實(shí)際上就是從低精度的數(shù)值類型到高精度的數(shù)值類型的轉(zhuǎn)換。例如: shortx=16; inty=x;//x從short到int隱式數(shù)值轉(zhuǎn)換隱式枚舉轉(zhuǎn)換 隱式枚舉轉(zhuǎn)換允許把十進(jìn)制整數(shù)0轉(zhuǎn)換成任何枚舉類型,對(duì)應(yīng)其它的整數(shù)則不存在這種隱式轉(zhuǎn)換,例如: enumWeekday{Sunday,Monday,Tuesday, Wednesday,Thursday,Friday,Saturday}; Weekdayday; day=0;//整數(shù)0轉(zhuǎn)換成Sunday,day=1編譯器就會(huì)給出錯(cuò)誤 Console.WriteLine(day);//程序的輸出是Sunday類型轉(zhuǎn)換顯式類型轉(zhuǎn)換顯式類型轉(zhuǎn)換又叫強(qiáng)制類型轉(zhuǎn)換,與隱式轉(zhuǎn)換正好相反,顯式轉(zhuǎn)換需要用戶明確地指定轉(zhuǎn)換的類型。如下例:longl=5000;inti=(int)l;//把一個(gè)long類型顯式轉(zhuǎn)換為int類型顯式數(shù)值轉(zhuǎn)換有可能丟失信息或?qū)е庐惓伋觥.惓z測(cè)還與編譯器中是否設(shè)定了checked選項(xiàng)有關(guān),如果異常檢測(cè)checked選項(xiàng)選中,則當(dāng)顯式轉(zhuǎn)換發(fā)生了溢出時(shí)將拋出一個(gè)OverflowException異常,當(dāng)異常檢測(cè)checked選項(xiàng)未選中時(shí),在顯式類型轉(zhuǎn)換時(shí)發(fā)生溢出時(shí)導(dǎo)致了信息丟失,但程序正常運(yùn)行,默認(rèn)是checked選項(xiàng)未選中。下面explicit項(xiàng)目的代碼:longlongValue=Int64.MaxValue;//Int64.MaxValue=9223372036854775807,int的最大值intintValue=(int)longValueConsole.WriteLine("(int){0}={1}",longValue,intValue);類型轉(zhuǎn)換Convert類Convert類將一個(gè)基本數(shù)據(jù)類型轉(zhuǎn)換為另一個(gè)基本數(shù)據(jù)類型。受支持的基本類型是Boolean、Char、SByte、Byte、Int16、Int32、Int64、UInt16、UInt32、UInt64、Single、Double、Decimal、DateTime

和String。無法產(chǎn)生有意義的結(jié)果的轉(zhuǎn)換引發(fā)InvalidCastException,不實(shí)際執(zhí)行任何轉(zhuǎn)換。會(huì)引發(fā)異常有以下兩種:從Char轉(zhuǎn)換為Boolean、Single、Double、Decimal或DateTime,以及從這些類型轉(zhuǎn)換為Char。從DateTime轉(zhuǎn)換為除String之外的任何類型,以及從任何類型(String除外)轉(zhuǎn)換為DateTime。除此之外,任何基本類型都可以與任何其他基本類型進(jìn)行相互轉(zhuǎn)換。類型轉(zhuǎn)換Convert類如果數(shù)字類型轉(zhuǎn)換導(dǎo)致精度丟失(即某些最低有效位丟失),不引發(fā)異常。但是,如果結(jié)果超出了特定轉(zhuǎn)換方法的返回值類型所能表示的范圍,則將引發(fā)異常。例如,當(dāng)將Double轉(zhuǎn)換為Single時(shí),可能會(huì)發(fā)生精度丟失,但并不引發(fā)異常。但是,如果Double的值太大,無法由Single表示,則將引發(fā)溢出異常。ConvertSample項(xiàng)目的代碼如下:doubledNumber=23.15;intiNumber=System.Convert.ToInt32(dNumber);//23boolbNumber=System.Convert.ToBoolean(dNumber);//truestringstrNumber=System.Convert.ToString(dNumber);//23.15charchrNumber=System.Convert.ToChar(strNumber[0]);//2newInteger=System.Convert.ToInt32(System.Console.ReadLine());類型轉(zhuǎn)換內(nèi)存“堆?!焙汀岸选薄岸褩!焙汀岸选笔沁\(yùn)行庫(kù)對(duì)內(nèi)存進(jìn)行組織的兩種方式。堆棧內(nèi)存就像一系列堆疊越高的箱子。。堆內(nèi)存則像散布在房間里的一大堆箱子,而不像堆棧那樣每個(gè)箱子都嚴(yán)格地疊置在另一個(gè)箱子上方。每個(gè)箱子都有一個(gè)標(biāo)簽,它標(biāo)記了這個(gè)箱子是否使用。創(chuàng)建一個(gè)新對(duì)象時(shí),運(yùn)行庫(kù)會(huì)查找一個(gè)空箱子,并把它分配給對(duì)象。對(duì)對(duì)象的引用存儲(chǔ)在堆棧上的一個(gè)局部變量中。運(yùn)行庫(kù)將跟蹤對(duì)每一個(gè)箱子的引用數(shù)量,(兩個(gè)變量可能引用同一個(gè)對(duì)象)。一旦最后一個(gè)引用消失,運(yùn)行庫(kù)就將箱子標(biāo)記為“未使用”。所有值類型都是在堆棧上創(chuàng)建的,所有引用類型(對(duì)象)都是在堆上創(chuàng)建的。裝箱和拆箱裝箱inti=123;將在堆棧中分配出一小片內(nèi)存(剛好能存儲(chǔ)一個(gè)int),并使用值123來為變量i初始化。如圖2.1所示。使用new關(guān)鍵字和一個(gè)構(gòu)造函數(shù)調(diào)用來創(chuàng)建一個(gè)對(duì)象(類的一個(gè)實(shí)例)時(shí),需要同時(shí)使用堆和堆棧內(nèi)存,例如:ClassAa=newClassA();構(gòu)建ClassA對(duì)象所需的內(nèi)存是從堆中獲取,而對(duì)ClassA的引用a變量將從堆棧中內(nèi)存獲取。這正是new關(guān)鍵字所執(zhí)行的操作——它將運(yùn)行ClassA構(gòu)造函數(shù),將這個(gè)原始的堆內(nèi)存轉(zhuǎn)換成一個(gè)ClassA對(duì)象。對(duì)這個(gè)ClassA對(duì)象的引用將存儲(chǔ)到變量a中。裝箱和拆箱拆箱拆箱(取消裝箱)是從object類型到值類型從接口類型到實(shí)現(xiàn)該接口的值類型的顯式轉(zhuǎn)換。取消裝箱操作包括:檢查對(duì)象實(shí)例,確保它是給定值類型的一個(gè)裝箱值。將該值從實(shí)例復(fù)制到值類型變量中。inti=123;//值類型objecto=i;//裝箱intj=(int)o;//取消裝箱裝箱和拆箱變量聲明使用變量的一條重要原則是:變量必須先聲明后使用。變量可以在聲明時(shí)被賦值,也可以在聲明時(shí)不被賦值。變量聲明語(yǔ)法:數(shù)據(jù)類型標(biāo)識(shí)符;或數(shù)據(jù)類型標(biāo)識(shí)符=初值;例如: inti;或longj=2;其中i和j是用于命名變量的標(biāo)識(shí)符。標(biāo)識(shí)符起名時(shí)要遵守如下規(guī)則:變量名必須以字母,下劃線("_")或@開頭。變量名除開頭字符外其它字符只能由字母、數(shù)字和下劃線組成而不能包含空格標(biāo)點(diǎn)符號(hào)運(yùn)算符等其它符號(hào)。標(biāo)識(shí)符區(qū)分大小寫。變量名不能與C#中的關(guān)鍵字名稱相同,這些關(guān)鍵字如public,class等。變量名不能與C#中的類庫(kù)名稱相同。變量和常量變量類型變量可用于程序的三個(gè)地方:類或結(jié)構(gòu)的數(shù)據(jù)字段,字段有兩種分別是靜態(tài)字段,非靜態(tài)字段。類或結(jié)構(gòu)中的方法參數(shù),有三種:值參數(shù),引用參數(shù),輸出參數(shù)。類或結(jié)構(gòu)中的方法體內(nèi)或獨(dú)立的程序塊,即局部變量。 另外數(shù)組變量可以用在所有這三個(gè)地方,數(shù)組元素也是一種變量。以上變量共分為七種類型,下面的代碼說明以上七種類型的變量:變量和常量七種類型的變量示例classClassA{publicstaticintiStaticField;//intiField;voidF(int[]p1,intp2,refintp3,outintp4){intlocal=1;p4=p2*p3++;}}靜態(tài)字段變量iStaticField、非靜態(tài)字段變量或?qū)嵗兞縤Field、數(shù)組元素p1[0],局部變量local,值參數(shù)p2,引用參數(shù)p3,輸出參數(shù)p4。變量和常量常量常量是指在程序執(zhí)行過程中其值不能被改變的量,分為兩種:常數(shù)常量(const)和只讀常量(readonly)。常數(shù)常量(const)只能在定義字段時(shí)賦值,通常是值類型,如果是引用類型只能賦值null。定義常數(shù)常量的一般格式為:[特征][修飾符]const數(shù)據(jù)類型常量名=表達(dá)式;例如:publicconstdoublePI=3.14159;只讀常量(readonly)有兩種初始賦值方法:一是定義字段時(shí)賦值,二是在構(gòu)造函數(shù)中賦值,可以是值類型,也可以是引用類型。定義只讀常量的一般格式為:[特征][修飾符]readonly數(shù)據(jù)類型常量名[=表達(dá)式];classAClass{publicconstdoublePI=3.14159;privatereadonlyDateTimedtNow;publicAClass(){dtNow=DateTime.Now;}}變量和常量Pascal大小寫和camel規(guī)則標(biāo)識(shí)符有兩種常用命名規(guī)則:Pascal大小寫和camel規(guī)則。Pascal大小寫:將標(biāo)識(shí)符的首字母和后面連接的每個(gè)單詞的首字母都大寫。例如:BackColor大小寫混合camel規(guī)則:標(biāo)識(shí)符的首字母小寫,而每個(gè)后面連接的單詞的首字母都大寫。例如:backColor標(biāo)識(shí)符的通用規(guī)則:對(duì)于由多個(gè)單詞組成的所有公共成員、類型及命名空間名稱,要使用Pascal大小寫。如:public

class

TextBox//類型命名Pascal規(guī)則{

public

void

DataBind()

{

}//公共方法命名Pascal規(guī)則}對(duì)局部變量和參數(shù)名稱使用大小寫混合camel規(guī)則public

AddUser(string

userId,

byte[]

password){//方法參數(shù)名稱使用大小寫混合camel規(guī)則

string

userName;//局部變量使用大小寫混合camel規(guī)則}標(biāo)識(shí)符命名規(guī)則標(biāo)識(shí)符命名接口的名稱加前綴

I:interface

ICompare{

int

compare();}

方法的命名.一般將其命名為動(dòng)賓短語(yǔ):ShowDialog();CreateFile();GetPath();用有意義的名字命名namespace(命名空間),如:產(chǎn)品名、公司名.

選擇名稱準(zhǔn)則:請(qǐng)選擇易讀的標(biāo)識(shí)符名稱。例如,英文屬性名稱HorizontalAlignment比AlignmentHorizontal更具可讀性。可讀性比簡(jiǎn)潔性更重要。屬性名稱CanScrollHorizontally比ScrollableX(指X軸,但意義不明確)更好標(biāo)識(shí)符命名規(guī)則表達(dá)式操作符操作符的分類有三種:?jiǎn)文窟\(yùn)算符:如-x、x++、sizeof(x);雙目運(yùn)算符:如x+y、x%y;三目運(yùn)算符:如條件運(yùn)算符“?:”如:y=(X>10?0:1);操作符的優(yōu)先級(jí)如右表一元+、-、!、~、++x、--x、(T)x算術(shù)--乘法*,/,%算術(shù)--加法+,-移位<<,>>關(guān)系和類型檢測(cè)<,>,<=,>=,is,as相等==,!=邏輯(按優(yōu)先級(jí)順序)&,^,|條件(按優(yōu)先級(jí)順序)&&,||,?:賦值=,+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=算術(shù)運(yùn)算符和賦值運(yùn)算符算術(shù)運(yùn)算符及其表達(dá)式+(加法運(yùn)算符,或正值運(yùn)算符,如1+2,+3)-(減法運(yùn)算符,或負(fù)值運(yùn)算符,如1-2,-3)*(乘法運(yùn)算符,如1*2)/(除法運(yùn)算符,如1/2)%(模運(yùn)算符或稱求余運(yùn)算符,如7%3=1)賦值運(yùn)算符 變量=表達(dá)式;例如:inti=10;復(fù)合賦值運(yùn)算符是雙目運(yùn)算符與賦值運(yùn)算符的組合,簡(jiǎn)化了賦值語(yǔ)句的書寫,其形式為:

x運(yùn)算符=y;例如: x+=5;//等于x=x+5表達(dá)式操作符關(guān)系運(yùn)算符關(guān)系運(yùn)算表達(dá)式的結(jié)果是布爾類型bool的值(true或false)。比較運(yùn)算符有四種:<(小于)、<=(小于等于)、>(大于)、>=(大于等于)。等式運(yùn)算符:==(等于)、!=(不等于)。對(duì)于預(yù)定義的值類型,如果操作數(shù)的值相等,則相等運(yùn)算符(==)返回true,否則返回false。對(duì)于string

以外的引用類型,如果兩個(gè)操作數(shù)引用同一個(gè)對(duì)象,則==返回true。對(duì)于string類型,==比較字符串的值。object.Equal與object.ReferenceEquals方法: 若要檢查引用相等性,應(yīng)使用object的ReferenceEquals方法。若要檢查值相等性,應(yīng)使用object的Equals方法。表達(dá)式操作符usingSystem;classMainClass{staticvoidMain(){//數(shù)值比較:Console.WriteLine((2+2)==4);//輸出trueConsole.WriteLine((2+2)!=4);//輸出false//數(shù)值裝箱比較,相同值裝箱成為兩個(gè)不同objectobjects=1;objectt=1;Console.WriteLine(s.Equals(t));//輸出trueConsole.WriteLine(object.Equals(s,t));//輸出trueConsole.WriteLine(object.ReferenceEquals(s,t));//輸出false}}EqualSample項(xiàng)目的代碼如下:布爾表達(dá)式布爾表達(dá)式(邏輯表達(dá)式)的結(jié)果是一個(gè)布爾值,結(jié)果為真則為true,結(jié)果為假則為false。C#中的布爾運(yùn)算符(邏輯運(yùn)算符)如下:&&(邏輯與) 如true&&true結(jié)果是true,ture&&false結(jié)果是false||(邏輯或) 如ture||false結(jié)果是true,false||false結(jié)果是false!(邏輯非) 如!true結(jié)果是false,!false結(jié)果是true表達(dá)式操作符位運(yùn)算符C#中的位運(yùn)算符如下:~(按位求反)、&(按位與)、|(按位或)、^(按位異或)、<<(左移)、>>(右移)。位運(yùn)算符是對(duì)其操作數(shù)按其二進(jìn)制形式逐位進(jìn)行運(yùn)算,參加位運(yùn)算的操作數(shù)必須為整型或者是可以轉(zhuǎn)換為整型的任何其他類型。示例代碼如下:intv=0x22000022;Console.WriteLine("~0x{0:x8}=0x{1:x8}",v,~v);//輸出~0x22000022=0xddffffdd表達(dá)式操作符條件表達(dá)式條件表達(dá)式的一般格式為: 表達(dá)式1?表達(dá)式2:表達(dá)式3;例如: max=((a>b)?a:b);條件表達(dá)式的第一個(gè)操作數(shù)必須是一個(gè)布爾表達(dá)式,或者是可以轉(zhuǎn)換為布爾類型的表達(dá)式,否則編譯會(huì)出現(xiàn)錯(cuò)誤。如果條件為true,則計(jì)算第一表達(dá)式并以它的計(jì)算結(jié)果為準(zhǔn);如果為false,則計(jì)算第二表達(dá)式并以它的計(jì)算結(jié)果為準(zhǔn)。如(3>2?”3>2”,”2>3”)結(jié)果是”3>2”。表達(dá)式操作符自增、自減運(yùn)算符自增(++)、自減(--)運(yùn)算符都是單目運(yùn)算符,其作用是以一種緊湊格式使變量的值自動(dòng)增1或減1。自增(++)、自減(--)分兩種用法:運(yùn)算符后置用法(如i++),代表先使用變量,然后對(duì)變量增值。運(yùn)算符前置用法(如++i),代表先對(duì)變量增值,再使用變量。例如:

intx=5; Console.WriteLine((x++)+(x++)+(x++));//輸出18 inty=(++x)+(++x)+(++x); Console.WriteLine(y);//輸出30表達(dá)式操作符is運(yùn)算符、as運(yùn)算符is表達(dá)式的一般格式為:變量(表達(dá)式)is數(shù)據(jù)類型,is是檢查對(duì)象是否與給定類型兼容,如果所提供的表達(dá)式非空,并且所提供的對(duì)象可以強(qiáng)制轉(zhuǎn)換為所提供的類型而不會(huì)導(dǎo)致引發(fā)異常,則is表達(dá)式的計(jì)算結(jié)果將是true。例如:Console.WriteLine(1isint);//trueConsole.WriteLine(1isfloat);//falseas運(yùn)算符類似于強(qiáng)制轉(zhuǎn)換,用于在兼容的引用類型之間執(zhí)行轉(zhuǎn)換。所不同的是,當(dāng)轉(zhuǎn)換失敗時(shí),運(yùn)算符將產(chǎn)生空,而不是引發(fā)異常。更嚴(yán)格地說,這種形式的表達(dá)式expressionastype等效于expressionistype?(type)expression:(type)null。比如:

strings=‘a(chǎn)’asstring;//s=null表達(dá)式操作符typeof運(yùn)算符、sizeof運(yùn)算符typeof運(yùn)算符可以獲得指定類型的System.Type對(duì)象。typeof表達(dá)式的一般格式為:typeof(類型)。例如:System.Typetype=typeof(int);inti=0;System.Typetype=i.GetType();sizeof運(yùn)算符用于獲取值類型在內(nèi)存中占的字節(jié)大小。sizeof表達(dá)式的一般格式為:sizeof(變量類型),這個(gè)表達(dá)式的結(jié)果是一個(gè)整數(shù),代表變量所占的字節(jié)數(shù)。例如sizeof(int)是4。表達(dá)式操作符checked操作符checked關(guān)鍵字用于對(duì)整型算術(shù)運(yùn)算和轉(zhuǎn)換顯式啟用溢出檢查。shortx=32767;//Maxshortvalueshorty=32767;try{shortz=checked((short)(x+y));//溢出}catch(System.OverflowExceptione){Console.WriteLine(e.ToString());//捕捉該異常}表達(dá)式操作符unchecked操作符unchecked關(guān)鍵字用于取消整型算術(shù)運(yùn)算和轉(zhuǎn)換的溢出檢查。如果unchecked表達(dá)式產(chǎn)生目標(biāo)類型范圍之外的值,則結(jié)果被截?cái)?。例如intx=2147483647;//Maxintinty=2;intz;unchecked{z=x*y;}Console.WriteLine("Uncheckedoutputvalue:{0}",z);//Uncheckedoutputvalue:-2表達(dá)式操作符字符串string

string字符串類型是任何一種編程語(yǔ)言最常使用的數(shù)據(jù)類型,string表示文本,即一系列Unicode字符。string是.NET框架中的System.String類型的別名,是使用string關(guān)鍵字聲明的一個(gè)字符數(shù)組,使用雙引號(hào)表示,如下例所示:strings1="Hello!";strings2="World";s1+=s2;//連接字符串s1和s2,并賦于s1System.Console.WriteLine(s1);//輸出”Hello!World”字符串中可以包含轉(zhuǎn)義符,如“\n”(新行)和“\t”(制表符)。stringhello="Hello\nWorld!";如果希望包含反斜杠\,則它前面必須還有另一個(gè)反斜杠。stringfilePath="\\\\MyDocuments\\";//實(shí)際上等同于:\\MyDocuments\使用@符號(hào)可以更方便在字符串忽略轉(zhuǎn)義符和分行符。例如:stringfilePath=@"\\MyDocuments\";//實(shí)際上等同于:\\MyDocuments\string、StringBuilder和DateTime字符串string常用方法同所有從Object派生的對(duì)象一樣,數(shù)值類型也提供ToString方法用于將值轉(zhuǎn)換為字符串。intyear=1999;//可以是long,decimal等類型stringmsg="他畢業(yè)于"+year.ToString();字符串string常用方法Trim():從開始位置和末尾移除空白字符。SubString():用于從指定的字符位置開始且具有指定的長(zhǎng)度取子字符串。 Replace():將指定String的所有匹配項(xiàng)替換為其他指定的String。strings3="VisualC#Express";Console.WriteLine(s3.Trim());//輸出"VisualC#Express"Console.WriteLine(s3.Substring(7,2));//輸出"C#"(從第7個(gè)字符開始,2個(gè)字符)Console.WriteLine(s3.Replace("C#","Basic"));//輸出"VisualBasicExpress"(替換字符)string、StringBuilder和DateTime字符串string常用方法ToCharArray()方法將字符串復(fù)制到字符數(shù)組: strings4="Hello,World"; char[]arr=s4.ToCharArray(0,s4.Length);使用索引[]訪問字符串中的各個(gè)字符: strings5="Runningbackwards";//s5[0]=’R’,s5[4]=‘i’ charc=s5[3]);//c=‘n’ToUpper()或ToLower()將字符串中的字母更改為大寫或小寫: strings6="AbCdEf"; System.Console.WriteLine(s6.ToUpper());//輸出"ABCDEF" System.Console.WriteLine(s6.ToLower());//輸出"abcdef"string、StringBuilder和DateTime字符串string常用方法IndexOf()在一個(gè)字符串中搜索另一個(gè)字符串。如果未找到搜索字符串,IndexOf()返回-1;否則,返回它出現(xiàn)的第一個(gè)位置的索引(從零開始)。 strings9="BattleofHastings,1066"; System.Console.WriteLine(s9.IndexOf("Hastings"));//outputs10 System.Console.WriteLine(s9.IndexOf("1967"));//outputs-1Split()方法使用分隔符(如空格字符)char數(shù)組,并返回一個(gè)子字符串?dāng)?shù)組。 char[]delimit=newchar[]{''};//分號(hào)之間有空格 strings10="Thecatsatonthemat."; string[]strs=s10.Split(delimit);//字符串?dāng)?shù)組{"The","cat","sat","on","the","mat."}string、StringBuilder和DateTime字符串string參數(shù)格式化 string字符串參數(shù)格式化有多種語(yǔ)句,常用的有以下兩個(gè)方法:string.Format(stringformat,paramsObject[]args) s=String.Format(“{0:D7

溫馨提示

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

評(píng)論

0/150

提交評(píng)論