![Introduction-to-C#(學(xué)習(xí)C#的好資料)_第1頁](http://file4.renrendoc.com/view/9c502f8f8c46f5b121da3ecf61dee2a3/9c502f8f8c46f5b121da3ecf61dee2a31.gif)
![Introduction-to-C#(學(xué)習(xí)C#的好資料)_第2頁](http://file4.renrendoc.com/view/9c502f8f8c46f5b121da3ecf61dee2a3/9c502f8f8c46f5b121da3ecf61dee2a32.gif)
![Introduction-to-C#(學(xué)習(xí)C#的好資料)_第3頁](http://file4.renrendoc.com/view/9c502f8f8c46f5b121da3ecf61dee2a3/9c502f8f8c46f5b121da3ecf61dee2a33.gif)
![Introduction-to-C#(學(xué)習(xí)C#的好資料)_第4頁](http://file4.renrendoc.com/view/9c502f8f8c46f5b121da3ecf61dee2a3/9c502f8f8c46f5b121da3ecf61dee2a34.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Microsoft公司.c#介紹C#是ー種簡(jiǎn)單、先進(jìn)、面向?qū)ο蠛皖愋桶踩木幊陶Z言,由C和C++派生而來。C#(讀作"Csh即’)深深地根植于C和C++語言家族。C和C++的編程人員能夠很快熟悉它。C#的目標(biāo)是將VisualBasic的高效率和C++的強(qiáng)大功能相結(jié)合。2000年6月20日?Microsoft公司版權(quán),1994200〇.版權(quán)所有.C#介紹〇?是一種簡(jiǎn)單、先進(jìn)、面向?qū)ο蠛皖愋桶踩木幊陶Z言,由c和C++派生而來。c#(讀作“Csharp")深深地根植于C和C++語言家族。C和C++的編程人員能夠很快熟悉它。C#的目標(biāo)是將VisualBasic的高效率和C++的強(qiáng)大功能相結(jié)合。C#是MicrosoftVisualStudio7.0的ー個(gè)組成部分。除了¢#外,VisualStudio還支持VisualBasic,VisualC++,和腳本語言VBScript和Jscript.所有這旳語言都可以應(yīng)用Microsoft.NET平臺(tái),該平臺(tái)包括ー個(gè)通用執(zhí)行リI擎(8mmonexecutionengine)和一個(gè)豐富的類庫。Microsoft.NET平臺(tái)定義了一個(gè)"通用語言子集CommonLanguageSubset"(CLS),這是ー種混和的語言,確保了CLS語言和類庫之間可以無縫地交互工作。對(duì)于C#開發(fā)人員而言,這意味著盡管C#是利新的語言,它完全可以使用經(jīng)驗(yàn)豐富的開發(fā)工具VisualBasic和VisualC++所使用的多個(gè)類庫。C#本身不包括任何類庫。本文描述該語言的ー些重要特點(diǎn),但并不是完整的語言說明。目的是向讀者介紹該語言,以便于開發(fā)最初的程序和閱讀完整的語言Hello,world程序經(jīng)典的“Hello,world"程序可以按照如下方式編寫:usingSystem;classHe1I〇IstaticvoidMain()(Console.做iteLine("Hello,worid");C#程序的源代碼通常保存在ー個(gè)或多個(gè)擴(kuò)展名為.cS的text文件中,例如he11。.cS。利用VisualStudio提供的命令行編譯器,利用ド面的命令編譯該程序:esche11o.cs結(jié)果生成了一個(gè)名為hello.exe的文件。這個(gè)程序的運(yùn)行結(jié)果是Hei1〇,worId該程序詳細(xì)分析如下:"usingSystem;”直接指向ー個(gè)Microsoft.NET類庫支持的名為sysIem的命名空間?該命名空間包含在岫in方法中指向的控制臺(tái)類。命名空間提供了結(jié)構(gòu)化的方法來組織ー個(gè)類庫的各個(gè)元素?!皍sing”命令表示可以無限制地使用命名空間地各種類型。在“Hello,world”程序中Console.卅iteLine是System.Console.WiteLine的縮寫。岫in方法是類Hello的ー個(gè)元素。它冇ー個(gè)靜態(tài)標(biāo)識(shí)符,表示它是類Hello的ー個(gè)方法而不是一個(gè)例程。?一個(gè)程序的主要入口一所謂的開始執(zhí)行的方法一是ー個(gè)名為Main的靜態(tài)方法。輸出“Hell。,world”是通過由一個(gè)類庫產(chǎn)生的。本語言自身并不提供類庫。相反,它使用了VisualBasic和VisualC++所使用的通用類庫。C和C++開發(fā)人員會(huì)對(duì)"Hello,world”程序中沒有出現(xiàn)的ー些元素感興趣:該程序并沒有在Main中使用全局方法。沒有全局的方法和變量;這些元素總是包括在類型聲明中(如類和結(jié)構(gòu)的聲明)。程序也沒有使用“::”或操作符?!?:”不再是ー個(gè)操作符,并且“ー〉”操作符只在很少一部分程序中使用?!?”操作符在例如Cons01e.WiteLine的復(fù)合名中使用。程序沒有先聲明。先聲明不再需要,因?yàn)槁暶鞯捻樞虿辉僦匾3绦驔]有使用#來包含導(dǎo)入程序。程序間的獨(dú)立性只是象征性的而不是嚴(yán)格的。系統(tǒng)消除了使用不同語言編寫的程序之間的障礙。例如,Console類可以用另外的語言編寫。類型C#支持兩種類型:value類型和referens類型。Value類型包括簡(jiǎn)單類型(如:char,int和float)、enum類型和struct類型。Reference類型包括class類型、interface類型、delegate突型和array類型。Value類型和reference類型的不同之處在于value類型的變量直接存儲(chǔ)它們的數(shù)據(jù),然而reference類型的變量存儲(chǔ)對(duì)象的指針。Reference類型使得兩個(gè)變量可以指向同一個(gè)對(duì)象,因此對(duì)ー個(gè)變量的操作可能會(huì)影響到多個(gè)變量指向的對(duì)象。對(duì)「value類型,每個(gè)變量有它們自己的數(shù)據(jù)拷貝,因此對(duì)ー個(gè)變量的操作不會(huì)影響到其他變量的值。例子:usingSystem;classClass1IpublicintVa1ue=0;)classTest(staticvoidMain(){ntvI=0;ntv2=v1;v2=123;Class1r1=newClass1();Class1r2=r1;r2.Vaiue=123;Console.卅iteLine("VaIues:{0|,(1|*,vI,v2);Console.的iteLine("Refs:{0),|1|",r1,Vaiue,r2,Va1ue);I)顯示了它們的區(qū)別。程序的輸出為:Vaiues:0,123Refs:123,123局部變量V1的賦值并沒有影響到局部變量V2的值,因?yàn)檫@兩個(gè)局部變量都是value類型(int類型),并且每個(gè)value類型的局部變量都有自己的存儲(chǔ)空間。相反,r2.Value=123;的賦值語句同時(shí)改變了rI和r2所指向的對(duì)象。程序行Console.WriteLine("Vaiues:(0),(1|",vl,v2);Console.W'iteLine("Refs:(01,{1)",r1.Va1ue,r2.Vaiue);需要進(jìn)ー步討論,因?yàn)樗鼈兪褂昧薈onsole.MiteLine的字符串格式,它實(shí)際上有多個(gè)參數(shù)。第一個(gè)參數(shù)是ー個(gè)字符串,可能包含類似于{0}和“}的按數(shù)字順序排列的占位符。每個(gè)占位符指向ー個(gè)示蹤參數(shù)。占位符{0}指向第二個(gè)參數(shù),占位符{1}指向第三個(gè)參數(shù)…。在輸出發(fā)送到控制臺(tái)之前,占位符被它們相應(yīng)的參數(shù)所替換。開發(fā)人員可以通過enum和struct聲明定義新的value類型,也可以通過class,interface和delegate定義新的reference類型。例子:usingSystem;publicenumCoIorIRed,Blue,Green1publicstructPointIpublicintx,y;)publicinterface(BaseIvoidF();)publicinterfaceIDerived:(BaseIvoidG();)publicclassAIprotectedvoidH()(Console.WiteLine(HA.H");)1publicclassB:A.1DerivedIpublicvoidF()|Console.W'iteLine("B.F,impIementationofIDerived.F");IpublicvoidG()(Console.的iteLine("B.G.impIementationof【Derived.G");)overrideprotectedvoidH()(Console.\WiteLine("B.H,overrideofA.H");I)publicdelegatevoidEmptyDeIegate();列舉了每種類型的ー個(gè)或兩個(gè)聲明。后面還將詳細(xì)描述類型聲明。預(yù)定義頻C#提供了預(yù)定義類型的集合,CandC++開發(fā)人員將對(duì)它們屮的大部分非常熟悉。預(yù)定義reference類型有対象和字符串。對(duì)象類型是其他所有類型的最基礎(chǔ)類型,字符串類型用來表示統(tǒng)編碼的字符串值。預(yù)定義value類型包括有符號(hào)和無符號(hào)整數(shù)類型、浮點(diǎn)類型以及b。。1、char和decima1類型。有符號(hào)整數(shù)類型有sbyte、short、int和long:無符號(hào)整數(shù)類型有byte、ushort、uint和dulong;浮點(diǎn)類型有float和double。sbool類型一般用ア表示布爾數(shù)值:值為true或false。Bool類型便「編寫自我說明的代碼,也有助于消除C++程序編寫中的一個(gè)普遍性錯(cuò)誤,即開發(fā)人員在應(yīng)該使用“==”的地方錯(cuò)誤地使用“ゴ。在C#中,例子inti=...;F(i);if(i=0) //Bug:thetestshou1dbe(i==0)G();
是不正確的,因?yàn)楸磉_(dá)式i=〇是int類型的,而程序中需要的是bool類型的表達(dá)式。Char類型一般用于表示統(tǒng)編碼的字符。ー個(gè)char類型的變量表示ー個(gè)16位統(tǒng)?編碼的字符。Decima!類型適用于不能有舍入誤差的計(jì)算。常見的例子包括金融結(jié)算比如稅收估計(jì)和流通貨幣轉(zhuǎn)換。Decima!類型有28位有效數(shù)字。卜表列出了預(yù)定義類型,并顯示如何賦值。類型描述例子object是所有其他類型的基礎(chǔ)類型objecto=null;string字符串類型;ー個(gè)字符串是ー個(gè)統(tǒng)ー編碼的字符序列strings=*'He11o";sbyte8位有符號(hào)整數(shù)類型sbyteva1=12;short16位有符號(hào)整數(shù)類型shortva1=12;int32位有符號(hào)整數(shù)類型intva1=12;long64位有符號(hào)整數(shù)類型1ongval1=12;longva12=34L;byte8位無符號(hào)整數(shù)類型bylevail=12;byteva12=34U;ushort16位無符號(hào)整數(shù)類型ushortvail=12;ushortva12=34U;uint32位無符號(hào)整數(shù)類型uintvail=12;uiniva12=34U;uiong64位無符號(hào)整數(shù)類型ulongvail=12;ulongva12=34U;alongva13=56L;alongva14=78UL;float單精度浮點(diǎn)類型floatva1=1.23F;double雙精度浮點(diǎn)類型doublevail=1.23;doubleva12=4.56D;bool布爾類型;ー個(gè)布爾類型的值為true或falseboolvail=true;boolva12=fa1se;char字符類型;ー個(gè)char的值是ー個(gè)統(tǒng)?編碼的字符charva1='h*;decima1有28位有效數(shù)字的精確十進(jìn)制類型decima1val=1.23M每個(gè)預(yù)定義類型是ー個(gè)系統(tǒng)定義類型的縮寫。例如關(guān)鍵字int是一個(gè)名為System.Int32的struct的縮寫。這兩個(gè)名字可以交換使用,一般來說最好使用關(guān)鍵字而不是使用完整的系統(tǒng)類型名。預(yù)定義value類型比如int冇多種特殊處理方法,在大部分情況下和其他structsー樣。操作符重載使得開發(fā)人員可以定義類似于預(yù)定義類型的變量。例如,一個(gè)Digitstruct可和預(yù)定義整數(shù)類型?樣支持系統(tǒng)的數(shù)學(xué)運(yùn)算,并且可以定義Digit和預(yù)定義類型之間的轉(zhuǎn)換。預(yù)定義類型本身具有操作符重載性。例如,比較操作符==和!=對(duì)于不同的預(yù)定義類型有不同的含義。?兩個(gè)int類型的表達(dá)式如果它們代表的相同的整數(shù)值,則認(rèn)為它們相等。?兩個(gè)。bject類型的表達(dá)式如果指向相同的對(duì)象,或兩者都為null,則認(rèn)為它們相等。.兩個(gè)string類型的表達(dá)式如果字符串的長(zhǎng)度相等并且對(duì)應(yīng)的位置上字符相同,或兩者都為null,則認(rèn)為它們相等。例子classFeststaticvoidMain()(string$="Test";stringt=string.Copy(s);Console.iteLine(s==t);Console.WiteLine((object)s==(object)t);)1生成如下的輸出TrueFalse因?yàn)榈谝粋€(gè)比較的是兩個(gè)siring類型的表達(dá)式,第二個(gè)比較的是兩個(gè)。bject類型的表達(dá)式。轉(zhuǎn)換有兩種類型的轉(zhuǎn)換:模糊轉(zhuǎn)換和精確轉(zhuǎn)換。模糊轉(zhuǎn)換用于那些不需要仔細(xì)審査也可安全運(yùn)行的轉(zhuǎn)換。例如,從int類型到long類型的轉(zhuǎn)換就是ー個(gè)模糊轉(zhuǎn)換。這個(gè)轉(zhuǎn)換總是成功的,也不會(huì)導(dǎo)致信息的丟失。模糊轉(zhuǎn)換可以不精確執(zhí)行,如下面的例子usingSystem;classTestIstaticvoidMain()(intintVa1ue=123;longIongVaIue=intVaIue;Console.W,iteLine(w(long){0)=(1|",intVaIue,IongVa1ue);)1不精確地從int轉(zhuǎn)換成|ong0相反,精確轉(zhuǎn)換有大量表達(dá)式執(zhí)行。例子usingSystem;classFest(staticvoidMain()(longIongVa1ue=Int64,MaxVa1ue;intintVa1ue=(int)1ongVa1ue;Console.WiteLine("(int){0|=(1|,IongVaIue,intVa1ue);)1利用ー個(gè)精確轉(zhuǎn)換來將一個(gè)long轉(zhuǎn)換為ー個(gè)int。輸出為:(int)9223372036854775807=-1因?yàn)楫a(chǎn)生了溢出。Array類型數(shù)組可以是?維或多維。支持規(guī)則“rectangular”數(shù)組和不規(guī)則“jagged”數(shù)組。ー維數(shù)組是最常見的類型,也是ー個(gè)很好的出發(fā)點(diǎn)。例子usingSystem;classTest(staticvoidMain()(TOC\o"1-5"\h\zint[]arr=new i nt[ 5];for(int i = 0; i < arr. Length; i++)arr[i] = i *i ;for(int i = 0; i < arr. Length; i++)Console.\WiteLine("arr[(0)]=(1ド,i,arr[i]);創(chuàng)建了一個(gè)int類型的ー維數(shù)組,初始化該數(shù)組元素,然后將它們打印出來。程序的輸出為:arr[0]=0arr[1]=1arr[2]=4arr[3]=9arr[4]=16前面例子中的類型int[]是一個(gè)數(shù)組類型。數(shù)組類型有一個(gè)非數(shù)組類型以及緊跟其的ー個(gè)和多個(gè)維度說明構(gòu)成。例子classTestIstaticvoidMain()(int[]al; //int類型的ー維數(shù)組int[,]a2; IIint類型的二維數(shù)組int[,,]a3; IIint類型的三維數(shù)組intl]|]j2; I!不規(guī)則數(shù)組:數(shù)組(int數(shù)組)int[][][]j3; //數(shù)組(數(shù)組(int數(shù)組)))顯示了多個(gè)局部變量的聲明,它們都使用int數(shù)組類型作為元素類型。數(shù)組是reference類型的,因此ー個(gè)數(shù)組變量的聲明僅僅留出了一個(gè)指向數(shù)據(jù)的地址空間。數(shù)組例程實(shí)際上通過數(shù)組初始化和數(shù)組創(chuàng)建表達(dá)式創(chuàng)建。例子classTeslstaticvoidMain()(int[)a1=newint[](1,2,3);int[,]a2=newint[.|({I,2,3},(4,5,6)};intj.,]a3=newint[10,20,30];TOC\o"1-5"\h\zint[IIJ j2=new i nt ( 3][];j2[0] = new int[ ] ( 1. 2, 3);j2[I] = new int[ ] | 1, 2, 3, 4, 5, 6);j2[2] = new int( ] ( 1, 2, 3, 4, 5, 6,7,8,9};ー些數(shù)組創(chuàng)建表達(dá)式。變量al、a2和a3表示規(guī)則數(shù)組,變量j2表示一個(gè)不規(guī)則數(shù)組。這些術(shù)語是建立在數(shù)組形狀的基礎(chǔ)上的。規(guī)則數(shù)組總是有一個(gè)規(guī)則形狀。給定數(shù)組各個(gè)維度的大小,它的規(guī)則現(xiàn)狀就很清楚。例如,a3三個(gè)維度大小分別為10、20和30,可以很清楚地看出這個(gè)數(shù)組包含10*20*30個(gè)元素。相反,變量j2表示一個(gè)不規(guī)則數(shù)組,和一個(gè)“數(shù)組的數(shù)組”。更確切的說是,j2表示ー個(gè)int數(shù)組的數(shù)組,和一個(gè)一維int”類型的數(shù)組。每個(gè)in“]變量可以単獨(dú)初始化,這就使得數(shù)組有一個(gè)不規(guī)則的形狀。本例子中每個(gè)int數(shù)組有不同的長(zhǎng)度。更確切的說是,j2[0]的長(zhǎng)度為3,j2[l]的長(zhǎng)度為6,j2[2]的長(zhǎng)度為9。元素的類型和維度大小是數(shù)組類型的一部分,但每個(gè)維度的長(zhǎng)度不是數(shù)組類型的部分。這個(gè)區(qū)別在語言語法中是很清楚的,因?yàn)槊總€(gè)維度的長(zhǎng)度是在數(shù)組創(chuàng)建表達(dá)式而不是在數(shù)組類型中指定的。例如聲明in(1,,]a3=newint[10,20,30];有一個(gè)數(shù)組類型int[,,]和一個(gè)數(shù)組創(chuàng)建表達(dá)式newint[10,20,30]〇對(duì)于局部變量和區(qū)域聲明,允許有縮寫形式,因此沒有必要再寫ー次數(shù)組類型。比如例int[]a1=newint[]{1,2,3);可以縮寫成intI]al=(1,2,3);在程序語義單是沒冇任何區(qū)別的。數(shù)組初始化例如”,2,3)的上下文用于決定被初始化的數(shù)組類型。例子classTestIstaticvoidMain()(short[]a={1,2,3};int[]b={I,2,3(;1ong[]c={1,2,31;)1顯示了系統(tǒng)的數(shù)組初始化可以應(yīng)用」:幾個(gè)不同的數(shù)組類型。因?yàn)樾枰粋€(gè)上卜文來決定數(shù)組初始化的類型,因此在ー個(gè)表達(dá)式上下文中只使用一個(gè)數(shù)組初始化是不可能的。類型系^^一TypesystemunificationC#提供了一個(gè)“統(tǒng)ー類型系統(tǒng)”。所有的類型ー包括value類型一由。bject類型派生而來。對(duì)于任何值,即使是簡(jiǎn)單類型例如int的值,都可以調(diào)用object方法。例子usingSystem;classTestIstaticvoidMain()(Console.W-iteLine(3.ToString());I)在ー個(gè)整數(shù)中調(diào)用對(duì)象定義ToString方法。例子classTeststaticvoidMain(){inti=123;objecto=i; //boxingintj=(int)o;//unboxingI(更冇趣。ー個(gè)int數(shù)值可以轉(zhuǎn)化成對(duì)象,然后再轉(zhuǎn)化為int。這個(gè)例子顯示了box/hg和unboxing-當(dāng)ー個(gè)value類型的變量需要轉(zhuǎn)化為reference類型,將分配ー個(gè)對(duì)象盒box來保存這個(gè)值,然后這個(gè)值被拷貝到box中。L/raboxMg剛好相反。當(dāng)ー個(gè)對(duì)象盒變成它的初始value類型,這個(gè)數(shù)值從box中拷貝出來,并放置到相應(yīng)的存儲(chǔ)地址中。類型系統(tǒng)統(tǒng)?使得value類型具有對(duì)象的優(yōu)勢(shì),這并不需要不不必要的花費(fèi)。對(duì)于不需要int數(shù)值具冇對(duì)象功能的程序來說,int數(shù)值僅僅是32位數(shù)值而已。對(duì)于需耍int數(shù)值具有對(duì)象功能的程序來說,這種能力剛好可以滿足需要。這種將value類型作為對(duì)象處理的能力連接了value類型和reference類型之間的差別,多數(shù)語言中均存在這種差別。例如,一個(gè)Stack類可以提供Push和Pop方法來返回對(duì)象值。publicclassStackIpublicobjectPop()(...)publicvoidPush(objecto){...|)因?yàn)镃#有一個(gè)統(tǒng)ー類型系統(tǒng),這個(gè)Stack類可以作為任何類型的堆棧使用,包括value類型如int?變量:和參數(shù)parameter變簸示ー個(gè)存儲(chǔ)空間。每個(gè)變量都有其類型,類型決定了什么樣的值可以存儲(chǔ)在該變量中。局部變量是那些在方法、屬性或索弓I中聲明的變量。ー個(gè)局部變量通常冇ー個(gè)類型名稱,并且有一個(gè)說明符來指定變量名稱和初始值,如下所示:inta;intb=1;一個(gè)局部變量的聲明中也可以包括多個(gè)說明符。說明符a和b可以書寫如下:inta,b=1;在對(duì)?個(gè)變量的值進(jìn)行運(yùn)算之前,必須對(duì)該變量進(jìn)行賦值。例子classrest(staticvoidMain()(inta;intb=1;intc=a+b;1…1是不正確的,因?yàn)樗噲D在變量賦值之前對(duì)其進(jìn)行操作。尼必是一個(gè)變量,它和類或struct(或它們的實(shí)例)相關(guān)。ー個(gè)field聲明如果包括static修飾符,則其被定義位一個(gè)靜態(tài)變量,否則為ー個(gè)/わstance變曷。例子usingSystem.Data;classEmpIoyee(privatestaticDataSetds;publicstringName;pub1icdecima1Salary;)中有一個(gè)Employee類,其中包括一個(gè)私冇靜態(tài)變量和兩個(gè)公冇例程變量。正式的參數(shù)聲明過程也可以定義變量。有四種類型的參數(shù):value參數(shù)、reference參數(shù)、output參數(shù)和params參數(shù)。心/ue參數(shù)用于“in”參數(shù)傳遞中,用于將一個(gè)變量的值傳遞到方法中,并且參數(shù)值的改變不會(huì)影響到初始變量值。Value參數(shù)指向它自己的存儲(chǔ)地址,和其對(duì)應(yīng)的變量存儲(chǔ)地址是分開的。該存儲(chǔ)地址在拷貝對(duì)應(yīng)變量值的時(shí)候進(jìn)行初始化。例子usingSystem;classTesl(staticvoidF(intp)(Console.WiteLine(Np=(。ド,p);P++;IstaticvoidMain()(inta=1;Console.W-iteLine(Mpre:a=(0)",a);F(a);Console.^iteLine("post:a={0)",a);)1有一個(gè)方法F,它包括ー個(gè)名為p的value參數(shù)。該例子輸出結(jié)果為:pre:a=1p=Ipost:a=1參數(shù)的值被改變了。Reference參數(shù)用于‘byreference"參數(shù)的傳遞,在其中參數(shù)的作用是充當(dāng)調(diào)用參數(shù)的別名。Reference參數(shù)本身沒有一個(gè)存儲(chǔ)地址,但它指向一個(gè)相應(yīng)變量的存儲(chǔ)地址。修改ー個(gè)reference參數(shù)會(huì)立即影響相應(yīng)的變量:。ー個(gè)reference參數(shù)用ref修飾符來聲明,例子usingSystem;classTest(staticvoidSwap(refinta,refintb)(intt=a;a=b;b=i;staticvoidMain()(ntx=1;nty=2;Console.WiteLine("pre:x=(01,y=(1)",x,y);Swap(refx,refy);Console,^iteLine("post:x=(0),y=(1|",x,y);I1有一個(gè)Swap方法,其中冇兩個(gè)reference參數(shù)。程序的輸出為:pre:x=l,y=2post:x=2,y=1ref關(guān)鍵字在正式參數(shù)聲明和使用中是必需的。在調(diào)用處使用ref可以引起開發(fā)人員對(duì)該參數(shù)的注意,使得開發(fā)人員知道調(diào)用的結(jié)果可以改變參數(shù)的值。Output參數(shù)類似于reference參數(shù),只是調(diào)用提供的調(diào)用者參數(shù)的初始值不再重要。output參數(shù)的聲明包括ー個(gè)out修飾符。例子usingSystem;classTest(staticvoidDivide(inta,intb,outintans,outintrem)(ans=a/b;rem=a%b;)staticvoidMain()(for(inti=1;i<10;i++)for(intj=I;j<10;j++)(intans,r;Divide(i,j,outans,outr);Console.WiteLine("{0);(1)={2}r{3ド,i,j,ans,r);)))中采用了Divide方法,包括兩個(gè)output參數(shù)一ー個(gè)用于除方法的結(jié)果,另一一個(gè)用于余數(shù)。對(duì)于value、reference-flioutput參數(shù)而言,調(diào)用變量提供的調(diào)用者變量和表示它們的參數(shù)是對(duì)應(yīng)的。params參數(shù)允許多對(duì)ー:單個(gè)params參數(shù)可以表示多個(gè)變量。換句話說,params參數(shù)允許多個(gè)變量集合。Params參數(shù)的聲明包括params修飾符。給定一個(gè)方法,只能冇ー個(gè)params參數(shù),并且需要在最后指定該參數(shù)。params參數(shù)的類型是ーー維數(shù)組類型。ー個(gè)調(diào)用函數(shù)可以傳遞單個(gè)這種數(shù)組類型的變量,也可以傳遞多個(gè)這種變量。例如下面的例子usingSystem;classTest(staticvoidF(paramsintI]args)(Console,WeiteLine("#ofarguments:<0)",args.Length);for(inti=0;i<args.Length;i++)Console.WiteLine(H\targs|10|j={1)H,i,args[i]);)staticvoidMain(){F(1,2);F(1,2,3);F(newint[]{1,2,3,4));I1中有一個(gè)方法F,具有多個(gè)int變量,例子多次調(diào)用了該方法,輸入為:〇farguments:0ofarguments:1args[0]=Iofarguments:2args(01=1args[1]=2ofarguments:3args[01=1args[1]=2args[2]=3ofarguments:4args[0]=1args[1j=2args[2]=3args[3]=4
本介紹的大部分例子都使用Console類的WiteLine方法。在該方法的變量替換,如下面的例子所示?fiIa=]I)-2'Console.WiIeLine(*'a=(0|,b={I)H,a,b);是通過ー個(gè)params參數(shù)實(shí)現(xiàn)的。WiteLine方法通常包含多個(gè)重載方法(可以傳遞少數(shù)的變量)加一個(gè)具有params參數(shù)的方法。namespaceSystemIpublicclassConsolepublic static void WriteLine(string s) {.. .|pub1ic static void WriteLine(string st obj ect a) (...|pub1ic static void WriteLine(string s, obj ect a, object b)pub)icstaticvoidpub)icstaticvoid卅iteLine(strings,paramsobject[]args)自動(dòng)內(nèi)存管理ナエ為存管理需要開發(fā)人員管理內(nèi)存塊的分配和回收。手工內(nèi)存管理費(fèi)時(shí)又費(fèi)カ。自動(dòng)內(nèi)存管理的實(shí)現(xiàn),將開發(fā)人員從這個(gè)繁重的任務(wù)中解放出來。在大多數(shù)情況下,自動(dòng)內(nèi)出管理提高了程序代碼的質(zhì)量和開發(fā)人員的開發(fā)效率,對(duì)編程和實(shí)現(xiàn)并沒有什么不好影響。例子usingSystem;publicclassStackIprivateNodefirst=nul1;publicboolEmpty(get(return(first==null);))publicobjectPop()(if(first==nulI)thrownewException("Can'tPopfromanemptyStack.");else(objecttemp=first.VaIue;first=first.Next;returntemp;publicvoidPush(objecto){first=newNode(o,first);IclassNode{publicNodeNext;publicobjectValue;publicNode(objecivalue):this(vaIuetnull)()pubIicNode(objectvaIue,Nodenext)(Next=next;VaIue=va1ue;)有一個(gè)Stack類,通過相連的節(jié)點(diǎn)實(shí)例來實(shí)現(xiàn)。節(jié)點(diǎn)實(shí)例在Push方法中創(chuàng)建,不使用時(shí)再回收處理。當(dāng)ー個(gè)節(jié)點(diǎn)實(shí)例不再被任何程序代碼所調(diào)用時(shí),就會(huì)被回收。例如,當(dāng)從Stack中刪除ー項(xiàng)時(shí),相應(yīng)的那個(gè)節(jié)點(diǎn)就可以被回收。例子classTestIstaticvoidMain()(Stacks=newStack();for(inti=0;i<10;i++)s.Push(i);s=nul1;是一個(gè)應(yīng)用Stack類的測(cè)試程序。程序中創(chuàng)建了一個(gè)Stack,并初始化為10個(gè)元素,然后賦值為null。一旦變量賦值為nul1,Stack和相應(yīng)的10個(gè)節(jié)點(diǎn)就可以被回收?;厥仗幚頇C(jī)允許馬上回收它們,只不過并不需要這樣做。對(duì)于一般情況下對(duì)自動(dòng)內(nèi)存管理非常滿意,有時(shí)候又需要精確控制或特殊的功能的開發(fā)人員來說,C#也提供了編寫這種“不安全”代碼的能力。這種代碼可以通過指針類型來直接處理,并且利用以對(duì)象可以暫時(shí)阻止回收處理機(jī)工作。這種“不安全”代碼特性從開發(fā)人員和使用人員的角度來說其實(shí)是“安全”的。不安全代碼在程序中必須使用unsafe修飾符標(biāo)識(shí)出來,以便開發(fā)人員正確使用這些不安全特性,并且編譯器和執(zhí)行器也會(huì)ー起保證這些不安全的代碼不會(huì)化妝成安全代碼。例子usingSystem;classTest(unsafestaticvoidW-iteLocations(byte[]arr)(fixed(byte*p_arr=arr)(byte?p_e1em=p_arr;for(inti=0;i<arr.Length;i++)[bytevalue=*p_e1em;stringaddr=int.Format((int)pe1em,"X");Console.WriteLine("arr[{0)]at0x(1)is[2ド,i,addr,va1ue);pelem++;1'))staticvoidMain()(byte[]arr=newbyte|]{1,2,3,4,5);WiteLocations(arr);中應(yīng)用了一個(gè)不安全的方法WiteLocations,固定了一個(gè)數(shù)組例程,并且使用指針對(duì)這些元素進(jìn)行重復(fù)操作。每個(gè)數(shù)組元素的索引index、值value和地址輸入到控制臺(tái)中。程序的ー個(gè)可能輸出結(jié)果為:arr[0]at0x8E0360is1arr[1jat0x8E0361is2arrI2]at0x8E0362is3arr[3]at0x8E0363is4arr[4]at0x8E0364is5當(dāng)然,確切的內(nèi)存地址是會(huì)變化的。表達(dá)式C#包括多個(gè)一元操作符符、多個(gè)二元操作符符和一個(gè)三元操作符符。下表列出了這些操作符,按照它們優(yōu)先級(jí)的高低從上到下排列:類別操作符基本(x)x.yf(x)a[x]x++x--newtypeofsizeofcheckedunchecked一元+- ! ?++x--x(T)x乘除*/%加減+一替換Shift<<>>關(guān)系Relational<><=>=is等于==!=邏輯與&邏輯或非XORA邏輯或1條件與&&條件或11條件?,賦值=*=/=%=+=-=<<=>>=&=A=1=當(dāng)ー個(gè)表達(dá)式包含多個(gè)操作符時(shí),操作符的優(yōu)先級(jí)決定了先計(jì)算那個(gè)操作符。例如表達(dá)式x+y*z計(jì)算為x+(y*z)因?yàn)?操作符的優(yōu)先級(jí)比+操作符高。當(dāng)ー個(gè)操作符在兩個(gè)優(yōu)先級(jí)ー樣的操作符中間出現(xiàn)時(shí),操作符的關(guān)聯(lián)性決定了該執(zhí)行那個(gè)操作符。?除了賦值操作符之外,所有二元操作符是左關(guān)聯(lián)的,意味著操作符是從左運(yùn)算到右的。例如x+y+z計(jì)算為(x+y)+z.?賦值操作符和條件操作符(?:)都是右關(guān)聯(lián)的,意味著操作符從右運(yùn)算到左。例如x=y=z運(yùn)算成x=(y=z)°優(yōu)先級(jí)和關(guān)聯(lián)性可以由括號(hào)來控制。例如,x+y*z首先計(jì)算y和z相乘,然后加上X。但(x+y)*z首先計(jì)算X和y的和,然后和z相乘。語句C#的大部分語句是從C和C++那里借用過來的,當(dāng)然也冇ー些值得注意的增加和修改。下表列出了可以應(yīng)用的語句種類,每種類別都有一個(gè)例
語句例子語句列表和塊語句staticvoidMain()(F();GO;(H();1();)1標(biāo)記語句和goto語句staticvoidMain(string)|args){if(args.Length==0)gotodone:Console.的iteLine(args.Length);done:Console.W-iteLine("Done");1局部常數(shù)語句staticvoidMain()|constfloatpi=3.14;constintr=123;Console.卅iteLine(pi*r*r);1局部變量語句staticvoidMain(){inta;intb=2?c=3;a=1;Console.WiteLine(a+b+c);1表達(dá)式語句staticintF(inta,intb){returna+b;1staticvoidMain()(F(1,2); //Expressionstatement1If語句staticvoidMain(string(]args){if(args.Length==0)Console,^iteLine("Noargs");elseConsole.MiteLine("Argsw);!一Swi1ch語句staticvoidMain(string[]args)(switch(args.Length)(case0:Console.WiteLine("Noargs");break;case1:Console.\WiteLine("Onearg");break;default:ntn=args.Length;Console,卅iteLine("(0)args",n);break;)1whi1e語句staticvoidMain(string)|args){inti=0;whi1e(i<args.1ength){Console.WiteLine(args[i]);i++;)1
Do語句staticvoidMain()strings;do|s=Console.whi1e(s!="Exit}{ReadLine();)");For語句staticvoidMain(stfor(inti=0;iConsole.的ileLi}ring||args)(<args.1ength;i++)ne(args|i]);Foreach語句staticvoidMain(stforeach(stringsCons〇!e.W"iteLi1ring[]args){inargs)ne(s);break語句staticvoidMain(stinti=0;whi1e(true)(if(i>argbreak;Console.Wi1)ring!1args)(s.Length)teLine(args|i++]);continue語RJstaticvoidMain(stinti=0;whi1e(true){Console1的iteLiif(i>args.Lecontinue;break;)1ring[|args){ne(args|i++]);ngth)return語句staticintF(inta,returna+b;)staticvoidMain()Console.MiteLinereturn;1intb)1((F(1,2));throw語句和try語句staticintF(inta,intb){if(b==0)thrownewException("Dividebyzero");returna/b;}staticvoidMain(){lry(Console.師iteLine(F(5,0));1catch(Exceptione)(Console,的iteLine("Error");11checked和uncheckedstaticvoidMain()intx=100000,y]=100000;Console.W1iteLineConsole.iteLineConsole?的ileLine}(unchecked(x*y));(checked(x*y));(x*y);lock語句staticvoidMain()Aa=...1ock(a)(a.P=a,P+1;I(類聲明定義了一個(gè)新的reference類型。一個(gè)類可以繼承其他的類,并且可以有零個(gè)或多個(gè)接口。類元素可以包括常數(shù)、域、方法、屬性、索引、事件、操作符、構(gòu)造函數(shù)、析構(gòu)函數(shù)以及嵌套類型聲明。每個(gè)元素有一個(gè)相關(guān)的訪問性,決定了在那些程序文本空間內(nèi)能夠訪問這個(gè)元素??偣灿?種類型的訪問性。如下表所示。形式含義public不受限制的訪問protected程序內(nèi)部或由所包含類派生的類型訪問interna1本程序訪問protectedinterna1程序內(nèi)部或由所包含類派生的類型訪問private所包含的類型訪問usingSystem;classMyClassIpublicMyClass()(Console.MileLine("Constructor");)publicMyClass(in(va1ue)(MyField=va1ue;Console.MiteLine("Construc(or");I-MyClass()(Console.WileLine("Destructor");IpublicconstintMyConst=12;publicintMyFieId=34;publicvoidMyMethod(){Console.W-iteLine("MyCIass.MyMethod");IpublicintMyProperty(get(returnMyFieId;)set(MyFie1d=vaIue;)Ipublicintthis|intindex]{get(return0;
Console.師iteLine("thi$[{0}] {1}",index,va1ue);))pubIiceventEventHandlerMyEvent;publicstaticMyClassoperator+(MyClassa,MyClassb){returnnewMvClass(a.MyField+b.MyFie1d);)interna1classMyNestedCIass())中有一個(gè)類,包含了各種類型的元素。例子//Constan(usageConsole.W,iteLine("MyConst={〇}",MyClass.MyConst);//Fieldusagea.MyFieId++;Console.W-iteLine("a.MyField=<〇}二a,MyField);11Methodusagea.MyMethod();11Propertyusagea.MyProperty++;Console.teLine("a.MyProperty={0}",a.M>'Property);111ndexerusagea[3]=a[1]=a[2];Console.W-iteLine("a[3]=[。ド,a[3]);11Eventusagea.MyEvent+=newEventHandler(MyHand!er);11Over1oadedoperatorusageMyClassc=a+b;)staticvoidMyHandler(objectsender,EventArgse)(Console.MiteLine(**Test.MyHandler");)internaIclassMyNestedCIass0)顯示了如何使用這些元素常數(shù)ー個(gè)常數(shù)是ー類表示一個(gè)不變值的元素:這個(gè)值可以在編譯的時(shí)候就計(jì)算出來。在同一個(gè)程序中一個(gè)常數(shù)可以由另外一些常數(shù)計(jì)算得到,只要沒有循環(huán)依靠就可以。例子classConstantsIpubIicconstintA=1;pubIicconstintB=A+I;)包括了一個(gè)名為Conslant$的類,其中有兩個(gè)public常數(shù)。常數(shù)默認(rèn)是靜態(tài)的,可以由類訪問,例如
classTestIstaticvoidMain(){Con$ole.WiteLine("(〇),{1)",Constants.A,Constants.B);)1顯示了常數(shù)A和常數(shù)B的值。域Fields域的ズ是ー個(gè)元素,表示和對(duì)象或類相關(guān)的ー個(gè)變量。例子classColor(internaIushortredPart;internaIushortbluePart;internaIushortgreenPart;publicColor(ushortred,ushortblue,ushortgreen)(redPart=red;bluePart=blue;greenPart=green;)「ー顯示了一個(gè)Color類,有名為redPart、greenPart和bluePart的內(nèi)部例程域0域可以是靜態(tài)的,如下面的例子newColor(OxFF,0,0);newColor(0.OxFF,0);=newColor(Ot0,OxFF);=newColor(0,0,0);有Red、BlueヽGreen和Wiite的靜態(tài)域。靜態(tài)域在這種情況下并沒有很好地匹配。當(dāng)Color類裝載時(shí),該域被初始化,但初始化后就沒冇什么東西來阻止客戶端對(duì)它們的改變。這種改變也許會(huì)在使用Color并且假定這些值不會(huì)變化的程序中帶來不可預(yù)測(cè)的錯(cuò)誤。只讀域可以防止這個(gè)問題。ー個(gè)只讀域的賦值只能在其聲明中完成,或在相同類的創(chuàng)建過程中完成。這樣Color類可以通過為靜態(tài)域加入readonly修飾符來改進(jìn):classCoIoriniernaIushortredPart;internaIushortbluePart;iniernaIushortgreenPart;publicColor(ushortred,ushortblue,ushortgreen)(redPart=red;bluePart=blue;greenPart=green;d=newColor(OxFF,0,0);ue=newColor(0,OxFF,0);een=newColor(0,0,OxFF);ite=newColor(0,0,0);方法Methodsー個(gè)方法是ー個(gè)可以實(shí)現(xiàn)由對(duì)象或類所能完成的計(jì)算或操作的元素。方法可以有一些正式的元素(可以為空),一個(gè)返回值(或void),并且可以是靜態(tài)或非靜態(tài)的。靜態(tài)方法可以通過類來訪問。非靜態(tài)方法,也叫作例程方法,可以通過類中的例程訪問。例子usingSys(em;publicclassSlack(publicstaticStackClone(Stacks)(...)publicstaticStackFlip(Stacks){...)publicobjectPop()(...|publicvoidPush(objecto){...)publicoverridestringToString()(...|classTestIstaticvoidMain()(Stacks=newStack();for(inti=1;i<10;i++)s.Push(i);Stackflipped=Stack.Flip(s);nケ,vr,Tnケ,vr,T〇WWWceeeK000csssannnゝccciteLine("Originalstack:"+s.ToString());iteLine("Flippedstack:"+flipped.ToString());iteLine("Clonedstack:"+cloned.ToString());)I中有一個(gè)包括幾個(gè)靜態(tài)方法(Clone和Flip)和幾個(gè)例程方法(Push、Pop和ToString)的堆棧。方法可以重載,這意味著多個(gè)方法可以有相同的名稱,只要它們有不同的信息簽名。ー個(gè)方法的信息由方法名稱和它正式參數(shù)的數(shù)目、修飾符和類型構(gòu)成。方法的信息并不包括返回類型。例子classTest(staticvoidF()(Console.的ileLine("F()");IstaticvoidF(objecto){Console.5WiteLine("F(object)");)staticvoidF(intvaIue){Console.WiteLine("F(int)");)staticvoidF(inta,intb)(Console.W-iteLine(WF(int,int)");IstaticvoidF(int(]vaIues)|Console.WiteLine(wF(int(])");staticvoidMain()|F();F(1);F((object)1);F(1,2);F(newint[]{1,2,3});I)中由一個(gè)類,包括多個(gè)方法F。程序的輸出為:FOF(int)F(object)F(int,int)F(int[])屬性通過屬性可以訪問ー個(gè)對(duì)象或類的性質(zhì)。屬性的例子包括字符串的長(zhǎng)度、字體的大小、窗體的標(biāo)題、用戶名稱等等。屬性是域的自然延伸。兩者都是命名的、和類型相關(guān)的元素,訪問域和屬性的方法也類似。然而,和域不同,屬性沒有指定存儲(chǔ)地址。相反,屬性有存儲(chǔ)器,可以指定執(zhí)行語句來讀寫它們的值。屬性由屬性聲明語句定義。屬性聲明的第一部分和域聲明的第一部分相似。第二部分包括ー個(gè)get操作符和ノ或ー個(gè)set操作符。在下面的例子中,Button類定義了一個(gè)Caption屬性。publicclassButtonIprivatestringcaption;publicstringCaption(get(returncaption;)set(caption=va1ue;Repaint();)))屬性可以讀和寫,例如Caption屬性,包括get和set操作符。要讀取屬性的值時(shí),調(diào)用get操作符,要寫入屬性的值,調(diào)用set操作符。在set操作符中,屬性新的值以名為value的默認(rèn)參數(shù)形式給出。屬性的聲明相對(duì)簡(jiǎn)單,但屬性的真正值是在使用的時(shí)候而不是聲明的時(shí)候顯示的。Caption屬性的讀寫和域的讀寫是ー樣的:Buttonb=newBu11on();b.Caption="ABC";//setstrings=b.Caption;IIgetb.Caption+="DEF";//get&set事件Events事件是ー個(gè)對(duì)象或類可以定義的元素。ー個(gè)類通過事件聲明來定義一個(gè)事件,和一個(gè)域或事件的聲明類型,只是增加了一個(gè)addedevent關(guān)鍵字。聲明的類型必須是ー個(gè)delegate類型。publicdelegatevoidEventHandler(objectsender,Evente);publicclassButton(.publiceventEventHandlerClick;publicvoidReset()(Click=null;中Button類定義了一個(gè)類型為EventHandler的Click事件。在Butlon類中,Click元素對(duì)應(yīng)一個(gè)類型為EventHandler的私有域。然而,在Button類外,Click元素只能在操作符+二和?ニ的左邊使用。這個(gè)限制了客戶程序增加和刪除事件句柄。例子usingSystem;publicclassFormlIpublicForml(){11AddBu11on1_C1ickasaneventhand1erforButtonl'sClickeventButton1.Click+=newEventHandler(Buttonl_Click);)ButtonButtonI=newButton();voidButtonl.Click(objectsender,Evente){Console.iteLine("ButtonIwasclicked!");)publicvoidDisconnect(){Button1.Click-=newEventHandler(Button1Click);)(中有一個(gè)Forml類,為But【on1的Click事件加入了Buiton1_CIick作為事件句柄。在Disconnect方法中,刪除這個(gè)事件句柄??梢詰?yīng)用屬性類似事件聲明而不是域類似事件聲明來重寫B(tài)utIon類。如下面的例子所示:publicclassButton(publiceventEventHandlerClick{get(...IpublicvoidReset()(Click=nul1;))這個(gè)變化不會(huì)對(duì)客戶程序產(chǎn)生影響,但使得Button類實(shí)現(xiàn)更加靈活,因?yàn)镃lick的事件句柄沒有必要必須用ー個(gè)域來表示。操作符操作符定義了可以被類的例程使用的操作的含義。總共有三種類型的操作符:一元操作符、二元操作符和轉(zhuǎn)換操作符。ド面的例子定義了一個(gè)Digit類型表示十進(jìn)制數(shù)字-0和9之間的整數(shù)值。usingSystem;publicstructDigit(bytevaIue;
publIcDigit(bytevaIue){if(va1ue<011value>9)thrownewArgument1ue=va1ue;this).vapublicDigit(intvalue):this((byte)va1ue)()publicstaticimp1icitoperatorbyte(Digitd)(retuIrnd.va1ue;publicstaticexplicitoperatorDigit(byteb)|retu)rnnewDigit(b);publicstaticDigitoperator+(Digita,Digitb)newDigit(a.value+b.va1ue);retu)rnpub1icstaticDigitoperator*(Digita,Digitb)retu)rnnewDigit(a.value-b.va1ue);publicstaticbooloperator==(Digita,Digitb)retu)rna.va1ue==b.va1ue;publicstaticbooloperator!=(Digita,Digitb)retu)rna.va1ue!=b.va1ue;public0VerrideboolEqua1s(objectva1ue){retu)rnthis==(Digit)va1ue;pub1ic0VerrideintGetHashCode()(retu)rnva1ue.GetHashCode();public0VerridestringToString(){returnva1ue.ToString();)classTes(IstaticvoidMain()(Digit a= (Di gi t ) 5;TOC\o"1-5"\h\zDigit b= (Di gi t ) 3;Digit plus= a + b;b〇〇〇="!(!(--=eeenualwwwb〇〇〇="!(!(--=eeenualwww1boolequConsole.Console.Console.)1Digit類型定義了下面的操作符:?ー個(gè)從Digit到byte的默認(rèn)轉(zhuǎn)換操作符。?ー個(gè)從byte到Digit的默認(rèn)轉(zhuǎn)換操作符。?ー個(gè)相加操作符,將兩個(gè)Digit值相加并返回一個(gè)Digit值。?一個(gè)相減操作符,從ー個(gè)Digit值中減去另外一個(gè)值,并返回ー個(gè)Digit值。?ー個(gè)等于(==)和不等于(!=)操作符,用于比較兩個(gè)Digit的值。索引應(yīng)用索引可以使得一個(gè)對(duì)象可以類似數(shù)組的方式索引。屬性提供了類似于域的訪問,而索引提供了類似于數(shù)組的訪問。以前面所列的Stack類為例子。這個(gè)類需要提供類似于數(shù)組的訪問方式,以便不需要執(zhí)行Push和Pop屬性即可得到或改變項(xiàng)目的值。Stack是通過類似于列表的方式實(shí)現(xiàn)的,但沒冇數(shù)組訪問的便捷性。索引聲明和屬性聲明類似,主要的區(qū)別在于索引是沒有名稱的(在聲明中的“名稱”是this,因?yàn)閠his是索引的)并且索引包括索引參數(shù)。索引的參數(shù)用方括號(hào)括起來。例子usingSystem;publicclassStack[privateNodeGetNode(intindex)(Nodetemp=first;whiIe(index>0)(temp=temp.Next;returntemp;)publicobjectthis(intindex]{get(if(IValidlndex(index))thrownewException("Indexoutofrange.");elsereturnGetNode(index).VaIue;)set(if(IValidlndex(index))thrownewException("Indexoutofrange.");elseGetNode(index).Vaiue=vaIue;))classTestIstaticvoidMain(){Stacks=newStack();s.Push(1);s.Push(2);s.Push(3);TOC\o"1-5"\h\zs[0] = 33; // Changes the topitemfrom3to 33s[11 = 22; // Changes the middIeitemfrom2 to 22s[2j = 11; // Changes the bottomitemfromI to 11I)顯示了Stack類的ー個(gè)索引。例程構(gòu)造函數(shù)例程構(gòu)造函數(shù)用于實(shí)現(xiàn)所需要的初始化ー個(gè)類例程的功能。例子usingSystem;classPointIpublicdoublex,y;publicPoint(){this.x=0;this.y=0;IpubIicPoint(doubIex,doubley)(this.x=x;publicstaticdoubleDis(anee(Pointa,Pointb)(doublexdiff=a.x-b.x;doubleydiff=a.y-b.y;returnMath.Sqrt(xdiff*xdiff+ydiff?ydiff);)publicoverridestringToString()(returnstring.Format("((0),|I|)",x,y);I1classTestIstaticvoidMain()(Pointa=newPoint();Pointb=newPoint(3,4);doubled=Point.Distance(a,b);Console.W-iteLine("Distancefrom(0)to(I)is[2ド,a,b,d);I1中有?個(gè)Point類,其中提供了兩個(gè)公共構(gòu)造函數(shù)。ー個(gè)Point構(gòu)造函數(shù)不包含參數(shù),另外一個(gè)有兩個(gè)參數(shù)。如果沒冇給類提供構(gòu)造函數(shù),一個(gè)無參數(shù)的公共構(gòu)造函數(shù)將自動(dòng)加入到類中。析構(gòu)函數(shù)析構(gòu)函數(shù)用于完成所需要的解構(gòu)一個(gè)類實(shí)例的功能。析構(gòu)函數(shù)沒有參數(shù),沒有訪問修飾符,也不能確切調(diào)用。ー個(gè)實(shí)例的析構(gòu)函數(shù)在資源回收
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年聲學(xué)懸浮物監(jiān)測(cè)儀合作協(xié)議書
- 2025年基礎(chǔ)機(jī)械:液壓件合作協(xié)議書
- 2025年沼氣集中供氣系統(tǒng)合作協(xié)議書
- 2025年產(chǎn)品特許經(jīng)營(yíng)合同常用版(4篇)
- 2025年二手房東房屋租賃合同標(biāo)準(zhǔn)版本(4篇)
- 2025年九年級(jí)音樂教師工作總結(jié)第二學(xué)期(二篇)
- 2025年買賣房產(chǎn)合同標(biāo)準(zhǔn)版本(2篇)
- 2025年個(gè)人房屋租賃合同協(xié)議參考樣本(三篇)
- 2025年臨時(shí)勞動(dòng)協(xié)議標(biāo)準(zhǔn)范文(2篇)
- 2025年企業(yè)勞動(dòng)員工勞動(dòng)合同模板(2篇)
- GB/T 45107-2024表土剝離及其再利用技術(shù)要求
- 五年級(jí)上冊(cè)脫式計(jì)算100題及答案
- 人教版九年級(jí)英語動(dòng)詞時(shí)態(tài)專項(xiàng)練習(xí)(含答案和解析)
- 蘭州市規(guī)范醫(yī)療服務(wù)價(jià)格項(xiàng)目基準(zhǔn)價(jià)格表
- 2006年度銀行業(yè)金融機(jī)構(gòu)信息科技風(fēng)險(xiǎn)評(píng)價(jià)審計(jì)要點(diǎn)
- 火災(zāi)隱患整改登記表
- 普通地質(zhì)學(xué)教材
- 2022年全國(guó)高考詩歌鑒賞試題-教學(xué)課件
- 天津華寧KTC101說明書
- 2023-2024學(xué)年浙江省杭州市小學(xué)語文六年級(jí)上冊(cè)期末深度自測(cè)試題
- 縣道及以上公路保潔考核檢查評(píng)分表
評(píng)論
0/150
提交評(píng)論