Flowmaster腳本文件編寫教程_第1頁
Flowmaster腳本文件編寫教程_第2頁
Flowmaster腳本文件編寫教程_第3頁
Flowmaster腳本文件編寫教程_第4頁
Flowmaster腳本文件編寫教程_第5頁
已閱讀5頁,還剩59頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

北京?;萍奸_展有限責(zé)任公司VisualC#概述VisualStudio2005環(huán)境使用變量、操作符和表達(dá)式方法和作用域使用決策語句使用復(fù)合賦值和循環(huán)語句類和對(duì)象值和引用枚舉和結(jié)構(gòu)數(shù)組和集合使用繼承實(shí)現(xiàn)屬性VisualC#概述VisualStudio2005編程環(huán)境VisualStudio2005可以用來創(chuàng)建Windows應(yīng)用程序和網(wǎng)絡(luò)應(yīng)用程序,也可以用來創(chuàng)建網(wǎng)絡(luò)服務(wù),智能設(shè)備應(yīng)用程序和Office插件。VisualStudio2005是一個(gè)提供了豐富工具的編程環(huán)境。包括TeamTest設(shè)置、VisualBasic開發(fā)設(shè)置、VisualC#開發(fā)設(shè)置、VisualC++開發(fā)設(shè)置、VisualJ#開發(fā)設(shè)置、Web開發(fā)設(shè)置、常規(guī)開發(fā)設(shè)置。首次運(yùn)行需選擇,以后每次啟動(dòng)都將默認(rèn)為該設(shè)置。如要更改,則通過“工具——導(dǎo)入和導(dǎo)出設(shè)置”實(shí)現(xiàn)。VisualStudio已安裝的模板包括:Windows應(yīng)用程序、類庫、Windows控件庫、控制臺(tái)應(yīng)用程序、空項(xiàng)目、類庫、Web控件庫、Windows服務(wù)以及CrystalReports應(yīng)用程序。工程組成1..sln解決方案文件,這是最頂級(jí)的解決方案文件,每個(gè)應(yīng)用程序都有一個(gè)。包含了對(duì)一個(gè)或多個(gè)工程文件的引用。2.C#工程文件夾,包含以下內(nèi)容:.csproj工程文件,引用一個(gè)或多個(gè)包含工程源代碼以及其他內(nèi)容的文件,在一個(gè)工程中,所有源代碼都必須使用相同的編程語言來編寫。AssemblyInfo.cs文件,在Properties文件夾下,用來添加“屬性”,如作者姓名、程序編寫日期等。.cs工程代碼文件,是工程最初創(chuàng)立時(shí),在“代碼和文本編輯器”窗口中顯示的文件。bin和obj文件夾,是在生成應(yīng)用程序時(shí)創(chuàng)立的,其中包含了程序的可執(zhí)行版本和其他一些文件。如bin\Debug下的.exe是編譯好的程序,調(diào)試|開始執(zhí)行時(shí),會(huì)運(yùn)行該程序,.pdb和.vhost.exe文件包含了在調(diào)試模式中運(yùn)行程序時(shí)VisualStudio要使用的信息。VisualStudio2005編程環(huán)境使用命名空間命名空間能為各種標(biāo)識(shí)符創(chuàng)立一個(gè)已命名的容器。同名的兩個(gè)類如果在不同的命名空間中,那么相互是不會(huì)混淆的。應(yīng)該在命名空間中定義你所有的類,VisualStudio2005環(huán)境默認(rèn)使用工程名稱作為頂級(jí)命名空間。.NETFramework中的每個(gè)類都存在于一個(gè)命名空間中。如,Console類存在于System命名空間中。這意味著它的完全限定名稱是System.Console。Using預(yù)編譯指令可以用來限定即將使用的命名空間。在后續(xù)的代碼中,不需要再用命名空間來顯式地限定每一個(gè)名稱。VisualStudio在每次新建工程時(shí),都會(huì)自動(dòng)添加以下語句:usingSystem;usingSystem.Collections.Generic;usingSystem.Text;VisualStudio2005編程環(huán)境VisualStudio2005環(huán)境使用變量、操作符和表達(dá)式方法和作用域使用決策語句使用復(fù)合賦值和循環(huán)語句類和對(duì)象值和引用枚舉和結(jié)構(gòu)數(shù)組和集合使用繼承實(shí)現(xiàn)屬性VisualC#概述命名變量使用小寫字母作為變量名的首字母。在包含多個(gè)字母的標(biāo)識(shí)符中,從第二個(gè)單詞開始,每個(gè)單詞都采取首字母大寫的形式。聲明變量需要在一個(gè)聲明語句中聲明變量的類型和名稱,并以分號(hào)來終止。一個(gè)變量必須賦值后才能使用,否那么程序是無法編譯的?!?”是賦值操作符,用來將右側(cè)的值賦給左側(cè)的變量。使用變量數(shù)據(jù)類型描述大?。ㄎ唬┓秶纠齣nt整數(shù)32-231到231-1intcount;count=42;long長整數(shù)64-263到263-1longwait;wait=42L;float浮點(diǎn)數(shù)32±3.4×1038floataway;away=0.42F;double雙精度浮點(diǎn)數(shù)64±1.7×10308doubletrouble;trouble=0.42;decimal貨幣值12828個(gè)各不相同的數(shù)字decimalcoin;coin=42M;string字符序列每字符16不適用stringvest;vest=“42”;char單字符160到216-1chargrill;Grill=‘4’;bool布爾值8True或falseboolteeth;teeth=false;根本數(shù)據(jù)類型“+”:加法“-”:減法“*”:乘法“/”:除法“%”:求余

通常不建議對(duì)不同類型的數(shù)值進(jìn)行算術(shù)操作,并且計(jì)算結(jié)果的數(shù)值類型與操作數(shù)相同。

優(yōu)先級(jí):“*”“/”“%”的優(yōu)先級(jí)高于“+”“-”的優(yōu)先級(jí),可以使用圓括號(hào)來覆蓋優(yōu)先級(jí)。

結(jié)合性:以上幾種操作符均具有左結(jié)合性。算術(shù)操作符“++”:遞增“--”:遞減前綴和后綴

count++;//后綴遞增生成的值是遞增發(fā)生之前的count值++count;//前綴遞增生成的值是遞增發(fā)生之后的count值count--;//后綴遞減生成的值是遞減發(fā)生之前的count值--count;//前綴遞減生成的值是遞減發(fā)生之后的count值遞增和遞減變量VisualStudio2005環(huán)境使用變量、操作符和表達(dá)式方法和作用域使用決策語句使用復(fù)合賦值和循環(huán)語句類和對(duì)象值和引用枚舉和結(jié)構(gòu)數(shù)組和集合使用繼承實(shí)現(xiàn)屬性VisualC#概述指定方法聲明語法方法是一個(gè)已命名的語句集。類似于C或VisualBasic等編程語言中的函數(shù)或者子程序。是一種根本的、功能強(qiáng)大的編程機(jī)制。MicrosoftVisualC#方法的語法格式是:returnTypemethodName(parameterList){//這里添加方法的主體語句}聲明方法return語句如果希望一個(gè)方法返回信息,就必須在方法內(nèi)部寫一個(gè)return語句。為此,首先要寫下關(guān)鍵字return,再寫一個(gè)表達(dá)式〔它將計(jì)算要返回的值〕,因此表達(dá)式的類型必須與函數(shù)指定的返回類型相同。return語句應(yīng)該位于方法的尾部,因?yàn)樗鼤?huì)造成方法的結(jié)束。return語句之后的任何語句都不會(huì)執(zhí)行。如果方法的返回類型為void,可以先寫下關(guān)鍵字return,然后緊跟一個(gè)分號(hào)。return語句指定方法調(diào)用語法methodName(parameterList)此處的methodName應(yīng)與被調(diào)用的方法名一致,而parameterList用于提供將由方法接收的可選信息。必須為每個(gè)參數(shù)〔形參〕提供一個(gè)參數(shù)值〔實(shí)參〕,而且每個(gè)參數(shù)值都必須兼容于它對(duì)應(yīng)的形參的類型。每個(gè)方法調(diào)用中都必須包含一對(duì)圓括號(hào),即使調(diào)用一個(gè)無參數(shù)的方法。方法返回的值可以在能夠使用該值的任何地方使用。調(diào)用方法1.聲明方法intaddValues(intleftHandSide,intrightHandSide){//…}2.調(diào)用方法addValues(39,3);或intleftHandSide=39;intrightHandSide=3;addValues(leftHandSide,rightHandSide);調(diào)用方法例如作用域

如果一個(gè)變量能在程序中的一個(gè)特定位置使用,就說明該變量具有那個(gè)位置的作用域,也就是說,一個(gè)變量的作用域是指能夠使用該變量的程序區(qū)域。作用域既作用于方法,也作用于變量。一個(gè)標(biāo)識(shí)符的作用域是從聲明該標(biāo)識(shí)符的那個(gè)位置開始的。

運(yùn)用作用域定義作用域如:classExample又如:classExample{{voidfirstMethod()voidfirstMethod(){{intmyVar;myVar=42;……}}voidanotherMethod()voidanotherMethod(){{myVar=42;//錯(cuò)誤,變量越界myVar=42;……}}}intmyVar=0;}VisualStudio2005環(huán)境使用變量、操作符和表達(dá)式方法和作用域使用決策語句使用復(fù)合賦值和循環(huán)語句類和對(duì)象值和引用枚舉和結(jié)構(gòu)數(shù)組和集合使用繼承實(shí)現(xiàn)屬性VisualC#概述bool變量bool變量只能容納兩個(gè)值之一:true或者false

如:boolareYouReady;areYouReady=true;Console.WriteLine(areYouReady);//輸出True聲明bool變量布爾操作符關(guān)系操作符邏輯操作符布爾操作符操作符含義示例結(jié)果(假定age=42)==等于age==100false!=不等于age!=0true操作符含義示例結(jié)果(假定age=42)<小于age<21false<=小于或等于age<=18false>大于age>16true>=大于或等于age>=30true操作符含義示例結(jié)果&&邏輯與true&&falsefalse||邏輯或true||falsetrue如果想根據(jù)一個(gè)布爾表達(dá)式的結(jié)果選擇執(zhí)行兩個(gè)不同的代碼塊,就可以使用語句。理解if語句的語法

if語句的語法格式如下:if(booleanExpression)//此處if表達(dá)式必須是布爾表達(dá)式,或者是一個(gè)布爾變量statement-1;elsestatement-2;

例:intseconds=0;intminutes=0;…if(seconds==59){seconds=0;minutes++;}elseseconds++;if語句if(day==0)dayName=“Sunday”;elseif(day==1)dayName=“Monday”;elseif(day==2)dayName=“Tuesday”;elseif(day==3)dayName=“Wednesday”;elseif(day==4)dayName=“Thursday”;elseif(day==5)dayName=“Friday”;elseif(day==6)dayName=“Saturday”;elsedayName=“unknown”;嵌套if語句使用switch語句理解switch語句的語法switch語句的語法如下:switch(controllingExpression)//只能針對(duì)根本數(shù)據(jù)類型使用switch{caseconstantExpression://必須是常量表達(dá)式,而不能是計(jì)算值statements;break;標(biāo)簽之間如果沒有額外代碼,那么下面的statements;//的代碼會(huì)貫穿兩個(gè)casebreak;//break語句是用來阻止貫穿最常見的方式…default:statements;break;}VisualStudio2005環(huán)境使用變量、操作符和表達(dá)式方法和作用域使用決策語句使用復(fù)合賦值和循環(huán)語句類和對(duì)象值和引用枚舉和結(jié)構(gòu)數(shù)組和集合使用繼承實(shí)現(xiàn)屬性VisualC#概述使用復(fù)合賦值復(fù)合賦值操作符復(fù)合賦值操作符含義variable*=number;variable=variable*number;variable/=number;variable=variable/number;variable%=number;variable=variable%number;variable+=number;variable=variable+number;variable-=number;variable=variable-number;復(fù)合賦值操作符與簡單賦值操作符具有一樣的優(yōu)先級(jí)和右結(jié)合性。使用while語句while語句語法while(booleanExpression)statement;表達(dá)式必須是一個(gè)布爾表達(dá)式。布爾表達(dá)式必須放在圓括號(hào)內(nèi)。假設(shè)首次求值時(shí),布爾表達(dá)式為false,語句不會(huì)執(zhí)行。假設(shè)想要在一個(gè)while的控制下執(zhí)行兩個(gè)或者更多的語句,必須使用大括號(hào)將語句分組到一個(gè)塊中。例:inti=0;//initializationwhile(i!=10)//BooleanExpression{Console.WriteLine(i);//Statementi++;//updatecontrolvariable}i被稱作哨兵變量使用for語句for語句語法for(initialization;Booleanexpression;updatecontrolvariable)statement;for語句的三個(gè)局部都可以省略,但兩個(gè)分號(hào)不能省略,如果省略布爾表達(dá)式,那么就默認(rèn)為true,for語句會(huì)永遠(yuǎn)進(jìn)行下去。例:for(inti=0,j=10;i<=j;i++,j--)Console.WriteLine(i);使用do語句do語句語法對(duì)于while和for語句,主體語句計(jì)算之前會(huì)最先計(jì)算bool表達(dá)式的值,如結(jié)果為false,那主體語句一次都不會(huì)運(yùn)行。而do語句不同,在賦初值之后,首先運(yùn)行主體語句,之后再求解bool表達(dá)式的值,如果結(jié)果為false,那么將不再運(yùn)行主體語句,但主體至少已經(jīng)執(zhí)行了一次。其語法結(jié)構(gòu)為:dostatement;while(booleanExpression);VisualStudio2005環(huán)境使用變量、操作符和表達(dá)式方法和作用域使用決策語句使用復(fù)合賦值和循環(huán)語句類和對(duì)象值和引用枚舉和結(jié)構(gòu)數(shù)組和集合使用繼承實(shí)現(xiàn)屬性VisualC#概述類類程序中的信息需要分類,而設(shè)計(jì)一個(gè)類就是將相關(guān)信息放到一個(gè)有意義的實(shí)體中的過程。一個(gè)類容納的信息存儲(chǔ)在字段中,類要提供的功能那么用方法來實(shí)現(xiàn)。封裝使用一個(gè)類的程序不應(yīng)關(guān)心類的內(nèi)部實(shí)際如何工作。程序只需創(chuàng)立類的一個(gè)實(shí)例,然后調(diào)用類的方法,而不必關(guān)心他們具體是如何實(shí)現(xiàn)的。

定義并使用類定義類型classCircle{doubleArea()//類中的方法{return3.141592*radius*radius;}doubleradius;//類中的變量稱為“字段”}使用類型circlec;//創(chuàng)立一個(gè)circle變量c=newCircle();//初始化變量封裝控制可訪問性使用public和private關(guān)鍵字將方法和數(shù)據(jù)封裝在一個(gè)類的內(nèi)部之后,類就成為與外界隔絕的一個(gè)孤島。類內(nèi)定義的方法和字段只有在類內(nèi)才可以被看見,而外界是看不到它們的。我們雖然可以在程序中創(chuàng)立類的對(duì)象,但不能訪問該類的字段,也不都能調(diào)用它的方法。因此,該類目前沒有多大用處。然而,可以使用public和private關(guān)鍵字來修改字段或方法的定義,決定它們是否能從外部訪問:一個(gè)方法或字段假設(shè)只允許從類的內(nèi)部訪問,就說它是私有的。為了聲明一個(gè)private方法或字段,只需在它的聲明之前加private關(guān)鍵字。一個(gè)方法或字段假設(shè)既能從類的內(nèi)部訪問,也能從外部訪問,就說它是公共的。為了聲明一個(gè)public方法或字段,只需在它的聲明之前添加public關(guān)鍵字。

控制可訪問性例:classCircle{publicdoubleArea(){return3.141592*radius*radius;}privatedoubleradius;//如果不加private,那么默認(rèn)該字段是“私有的”}

使用構(gòu)造函數(shù)構(gòu)造函數(shù)使用new關(guān)鍵字來創(chuàng)立一個(gè)對(duì)象時(shí),公共語言運(yùn)行庫必須使用那個(gè)類的定義來構(gòu)造對(duì)象,并調(diào)用構(gòu)造函數(shù)來執(zhí)行任何必要的初始化。簡言之,構(gòu)造函數(shù)用來初始化對(duì)象。構(gòu)造函數(shù)〔constructor〕是一種特殊的方法;它與類同名,能獲取參數(shù),但不能返回任何值。例:classCircle{publicCircle()//默認(rèn)構(gòu)造函數(shù){this.radius=0.0;}publicCircle(doubleinitialRadius)//重載的構(gòu)造函數(shù){this.radius=initialRadius;}publicdoubleArea(){return3.141592*radius*radius;}privatedoubleradius;}

使用構(gòu)造函數(shù)構(gòu)造函數(shù)被標(biāo)記為public。如果構(gòu)造函數(shù)是private的,它就不能在類的外部使用,造成無法從類的外部創(chuàng)立對(duì)象?,F(xiàn)在,類已經(jīng)能正常使用,Circlec;c=newCircle();doubleareaOfCircle=c.Area();//此處用圓點(diǎn)表示在c對(duì)象上調(diào)用Area方法此處,如果在新建對(duì)象圓括號(hào)中沒有給定字段的值,那么將使用默認(rèn)構(gòu)造函數(shù),如果該括號(hào)中給定字段值,那么將使用重載構(gòu)造函數(shù)?!矃⒖糣isualCsharpStepbyStep\Chapter7\Classes〕理解static方法static是定義一個(gè)方法或字段為靜態(tài)方法和靜態(tài)變量的關(guān)鍵字,該方法不必創(chuàng)立類的對(duì)象就可以使用了,一般通過類名來使用,沒加static的方法那么為實(shí)例方法,調(diào)用時(shí)是需要?jiǎng)?chuàng)立對(duì)象的,不可通過類名來直接使用。在C#中,所有方法都必須在一個(gè)類的內(nèi)部聲明,然而,如果使用static標(biāo)識(shí)符來聲明一個(gè)方法或字段,就可以使用類名來調(diào)用方法或訪問字段,而不需要先創(chuàng)立類的一個(gè)實(shí)例。下面展示了真正的Math類的Sqrt方法是如何聲明的:classMath{publicstaticdoubleSqrt(doubled){…}…}那么在實(shí)際應(yīng)用中,如果要調(diào)用Sqrt方法,就可以直接輸入Math.Sqrt(),而不必先創(chuàng)立一個(gè)實(shí)例Matha;a=newMath();doubled=a.Sqrt();這樣就太麻煩了?!矃⒖糣isualCsharpStepbyStep\Chapter7\Classes_static〕VisualStudio2005環(huán)境使用變量、操作符和表達(dá)式方法和作用域使用決策語句使用復(fù)合賦值和循環(huán)語句類和對(duì)象值和引用枚舉和結(jié)構(gòu)數(shù)組和集合使用繼承實(shí)現(xiàn)屬性VisualC#概述值和引用值類型所有的根本數(shù)據(jù)類型都稱為值類型。當(dāng)你聲明一個(gè)int變量時(shí),編譯器將生成代碼來分配足以容納一個(gè)整數(shù)的一個(gè)內(nèi)存塊。所有值類型都是在堆棧上創(chuàng)立的。引用類型聲明引用類型的變量時(shí),編譯器不會(huì)生成代碼來分配足以容納整個(gè)變量的內(nèi)存塊,它只會(huì)分配一小片內(nèi)存,其中剛好可以容納包含該變量的另一個(gè)內(nèi)存塊的地址〔或者對(duì)那個(gè)內(nèi)存塊的一個(gè)引用〕。所有引用類型都是在堆上創(chuàng)立的??傊?,如果某方法調(diào)用的是一個(gè)值類型〔如int〕的變量,那么在方法執(zhí)行后,輸出該變量至控制臺(tái),顯示值仍為方法執(zhí)行前的狀態(tài),因?yàn)榉椒ㄕ{(diào)用的僅僅是該變量的一個(gè)副本,而不是對(duì)原始變量進(jìn)行操作。如果某方法調(diào)用的是一個(gè)引用類型〔如類類型〕的變量,該變量作為參數(shù)傳給該方法。那么在該方法中,對(duì)對(duì)象的內(nèi)容進(jìn)行的任何修改都會(huì)在方法完成之后通過該變量反映出來。(參考VisualCsharpStepbyStep\Chapter8\Parameters)使用ref和out參數(shù)創(chuàng)立ref參數(shù)如果為一個(gè)參數(shù)〔形參〕附加了ref關(guān)鍵字作為前綴,那么參數(shù)就會(huì)成為實(shí)參的一個(gè)別名,而不再是實(shí)參的一個(gè)副本。使用ref參數(shù)時(shí),向參數(shù)應(yīng)用的任何操作,都會(huì)同樣應(yīng)用于實(shí)參。要?jiǎng)?chuàng)立ref參數(shù),方法圓括號(hào)中的實(shí)參〔argument〕與形參〔parameter〕之前都需要加前綴ref。(適用于調(diào)用方法時(shí)賦初值)創(chuàng)立out參數(shù)調(diào)用方法之前,參數(shù)應(yīng)該被初始化,否那么將不能編譯。如果希望由方法本身來初始化參數(shù),而傳遞給方法的只是一個(gè)未初始化的實(shí)參,可以通過out關(guān)鍵字來實(shí)現(xiàn)。關(guān)鍵字與ref關(guān)鍵字非常相似。你可以為一個(gè)參數(shù)附加out前綴,使參數(shù)成為實(shí)參的一個(gè)別名。在向方法傳遞一個(gè)out參數(shù)后,必須在方法內(nèi)部對(duì)其進(jìn)行賦值?!策m用于調(diào)用方法時(shí)未賦初值,但在定義方法時(shí)賦初值?!?/p>

(參考VisualCsharpStepbyStep\Chapter8\Parameters)

System.Object類所有類都是System.Object的一個(gè)特殊化類型,可以使用System.Object來創(chuàng)立一個(gè)能引用任何引用類型的變量。等價(jià)于object關(guān)鍵字。裝箱將一個(gè)數(shù)據(jù)項(xiàng)從堆棧自動(dòng)復(fù)制到堆的行為稱為裝箱。

如:inti=42;objecto=i;object類型的變量引用值類型,由于值類型存在于堆棧,這里o直接引用i,那么引用的將是堆棧,然而,所有引用都應(yīng)該引用內(nèi)存堆上的對(duì)象。所以實(shí)際情況是首先從內(nèi)存堆上劃分出一小片內(nèi)存,然后i中的一個(gè)副本將存儲(chǔ)到這片內(nèi)存中,最后讓o中的引用指向這個(gè)副本。拆箱

從已裝箱的變量中提取值的過程稱為拆箱。如:inti=42;objecto=i;//裝箱i=(int)o;//拆箱,為了訪問已裝箱的值,需要強(qiáng)制類型轉(zhuǎn)換。

拆箱時(shí)指定的類型必須與裝箱的類型完全一致。VisualStudio2005環(huán)境使用變量、操作符和表達(dá)式方法和作用域使用決策語句使用復(fù)合賦值和循環(huán)語句類和對(duì)象值和引用枚舉和結(jié)構(gòu)數(shù)組和集合使用繼承實(shí)現(xiàn)屬性VisualC#概述使用枚舉聲明枚舉enumseason{Spring=2,Summer,Fall,Winter}enum是關(guān)鍵字season是枚舉類型的名稱,它的值限于幾個(gè)符號(hào)名稱,這些符號(hào)需要用大括號(hào)來界定,中間用逗號(hào)隔開。一個(gè)枚舉為每個(gè)元素都關(guān)聯(lián)了一個(gè)整數(shù)值。默認(rèn)情況下,編號(hào)從0開始,它代表第一個(gè)元素,以后每個(gè)元素都遞增了1。使用枚舉

枚舉類型是一種值類型。聲明了一個(gè)枚舉類型的變量,只有在賦值之后才能使用。如:Seasoncolorful=Season.Fall;//以枚舉類型作為前綴,對(duì)直接量限定Console.WriteLine(colorful);//輸出“Fall”Console.WriteLine((int)colorful);//輸出“4”使用結(jié)構(gòu)類型類定義的是一種引用類型,它總是在堆上創(chuàng)立的。某些時(shí)候,類中只包含極少的數(shù)據(jù),因?yàn)楣芾矶褍涸斐傻拈_銷顯得不合算。在這種情況下,更好的做法是將類型定義成一個(gè)結(jié)構(gòu)。由于結(jié)構(gòu)是在堆棧上存儲(chǔ)的,所以能有效地減少內(nèi)存管理開銷。

常用結(jié)構(gòu)類型在以前的練習(xí)中,已經(jīng)大量地運(yùn)用了結(jié)構(gòu)。在C#中,根本數(shù)值類型int,long,float分別是System.Int32,System.Int64和System.Single這三種結(jié)構(gòu)類型的別名。此外,我們所熟悉的bool,byte,double,short等類型都是結(jié)構(gòu)類型。而object,string,char等都是類類型。聲明結(jié)構(gòu)類型和類一樣,結(jié)構(gòu)可以包含它自己的字段、方法和構(gòu)造函數(shù),區(qū)別在于,結(jié)構(gòu)是值類型,類是引用類型。StructTime{publicTime(inthh,intmm,intss){hours=hh%24;minutes=mm%60;seconds=ss%60;}publicintHours(){returnhours;}privateinthours,minutes,seconds;}(參考VisualCsharpStepbyStep\Chapter9\StructsAndEnums)結(jié)構(gòu)和類的區(qū)別問題結(jié)構(gòu)類是值類型還是引用類型?值類型引用類型它們的實(shí)例是存在于堆棧上還是堆上?結(jié)構(gòu)的實(shí)例稱為值,存在于堆棧上類的實(shí)例稱為對(duì)象,存在于堆上可以聲明一個(gè)默認(rèn)構(gòu)造函數(shù)嗎?不可以可以如果聲明自己的構(gòu)造函數(shù),編譯器仍然會(huì)生成默認(rèn)構(gòu)造函數(shù)嗎?會(huì)不會(huì)如果在自己的構(gòu)造函數(shù)中不初始化一個(gè)字段,編譯器會(huì)幫你初始化嗎?不會(huì),必須顯式地初始化一個(gè)結(jié)構(gòu)的所有字段會(huì)可以在聲明一個(gè)實(shí)例字段的同時(shí)初始化它嗎?不可以,只能在所有構(gòu)造函數(shù)中初始化所有字段可以VisualStudio2005環(huán)境使用變量、操作符和表達(dá)式方法和作用域使用決策語句使用復(fù)合賦值和循環(huán)語句類和對(duì)象值和引用枚舉和結(jié)構(gòu)數(shù)組和集合使用繼承實(shí)現(xiàn)屬性VisualC#概述數(shù)組數(shù)組是沒有排序的一個(gè)元素序列。數(shù)組中的所有元素都具有相同的類型。聲明數(shù)組變量為了聲明一個(gè)數(shù)組變量,首先需要寫上它所包含的元素的類型名稱〔不僅根本數(shù)據(jù)類型能作為數(shù)組元素,結(jié)構(gòu)、枚舉、類等類型的數(shù)據(jù)也可以作為數(shù)組的元素〕,后跟一對(duì)方括號(hào),最后寫上變量名稱〔最好是復(fù)數(shù)形式〕。如:int[]pins;創(chuàng)立數(shù)組實(shí)例數(shù)組是引用類型,為了創(chuàng)立一個(gè)數(shù)組實(shí)例,首先需要寫上new關(guān)鍵字,然后寫上元素類型的名稱,然后在方括號(hào)中添加要?jiǎng)?chuàng)立的數(shù)組的大小。如:pins=newint[4];使用數(shù)組變量初始化數(shù)組變量創(chuàng)立一個(gè)數(shù)組實(shí)例時(shí),所有的元素都被初始化為一個(gè)默認(rèn)值〔0,false,null等〕,如果希望將數(shù)組元素初始化為你希望的值,需要加一對(duì)大括號(hào)來實(shí)現(xiàn)。如:int[]pins=newint[4]{9,3,7,2};Time[]schedule={Time(12,30),Time(5,20)};//元素類型為結(jié)構(gòu)類型Time訪問單獨(dú)的數(shù)組元素為了訪問一個(gè)單獨(dú)的數(shù)組元素,你必須提供一個(gè)索引來表示自己請(qǐng)求的是哪一個(gè)元素。如:intmyPin;myPin=Pins[2];//索引值2訪問的是數(shù)組的第三個(gè)元素類似地,可以向一個(gè)索引元素賦值,從而更改數(shù)組的內(nèi)容:myPin=1645;pins[2]=myPin;集合類.NetFramework提供了幾個(gè)類,它們能夠通過其他特殊方式來收集元素。這些類稱為集合類,它們位于System.Collections命名空間中。根本的集合類能夠以對(duì)象的形式接受、容納并返回它們的元素。也就是說集合類的元素類型是object。這意味著在集合中插入一個(gè)值時(shí),它總是會(huì)進(jìn)行裝箱,從集合中移除一個(gè)值時(shí),那么必須進(jìn)行一次強(qiáng)制類型轉(zhuǎn)換,從而對(duì)它進(jìn)行拆箱。幾種常用的集合類以及它們引用的方法:ArrayList類:主要用于對(duì)一個(gè)數(shù)組中的元素進(jìn)行各種處理??梢允褂肦emove方法從ArrayList中移除一個(gè)元素,可以使用Add方法在ArrayList末尾添加一個(gè)元素,可以使用Insert方法在ArrayList中插入一個(gè)元素,等等。Queue類:實(shí)現(xiàn)了一個(gè)先入先出的機(jī)制。元素將在隊(duì)列的尾部插入〔Enqueue入隊(duì)操作〕,并從隊(duì)列的頭部移除〔Dequeue出隊(duì)操作〕。Stack類:實(shí)現(xiàn)了一個(gè)后入先出的機(jī)制。元素將在堆頂部進(jìn)入堆棧(Push入棧操作),也從頂部離開堆?!睵op出棧操作〕。Hashtable類:如果我們要訪問數(shù)組中的某個(gè)元素,可以通過索引來實(shí)現(xiàn),而Hashtable類在內(nèi)部維護(hù)者兩個(gè)object數(shù)組,一個(gè)容納作為映射來源的key,一個(gè)容納作為映射目標(biāo)的value。SortedList類:與Hashtable類非常相似,兩者都允許將key跟value關(guān)聯(lián)起來,只是,SortedList中,keys數(shù)組總是排好序的。比較數(shù)組與集合數(shù)組要聲明它容納的元素的類型,而集合不聲明。這是由于集合以object形式來存儲(chǔ)它們的元素的。

一個(gè)數(shù)組實(shí)例具有固定的大小,不能伸縮,而集合可根據(jù)需要?jiǎng)討B(tài)改變大小。

數(shù)組時(shí)一種可讀/可寫數(shù)據(jù)結(jié)構(gòu),沒有方法創(chuàng)立一個(gè)只讀數(shù)組。然而,可以使用由集合類提供的ReadOnly方法,以只讀方式來使用集合。該方法將返回一個(gè)集合的只讀版本。VisualStudio2005環(huán)境使用變量、操作符和表達(dá)式方法和作用域使用決策語句使用復(fù)合賦值和循環(huán)語句類和對(duì)象值和引用枚舉和結(jié)構(gòu)數(shù)組和集合使用繼承實(shí)現(xiàn)屬性VisualC#概述使用繼承繼承在程序設(shè)計(jì)中,繼承純粹是為了分類效勞的——它是類之間的一種關(guān)系。如人類與哺乳動(dòng)物類就可以聲明一個(gè)繼承關(guān)系,即人類繼承于哺乳動(dòng)物,與此同時(shí),鯨類也屬于哺乳動(dòng)物類,那么鯨類也可以聲明為哺乳動(dòng)物類的一個(gè)繼承。人類與鯨類都有著哺乳動(dòng)物的一切屬性,但又各自保存了特有的屬性。使用繼承為了聲明一個(gè)類是從另一個(gè)類繼承的,需要使用以下語法:classDerivedClass:BaseClass{…}這意味著派生類DerivedClass將從基類BaseClass繼承在C#中,System.Object類是所有類的根。所有類都隱式地派生于System.Object類,而所有類都自動(dòng)繼承了System.Object類的所有特性,包括像ToString這樣的方法。調(diào)用基類構(gòu)造函數(shù)一個(gè)派生類會(huì)自動(dòng)包含來自基類的所有字段。創(chuàng)立對(duì)象時(shí),需要對(duì)這些字段初始化。因此,派生類的構(gòu)造函數(shù)必須調(diào)用它的基類的構(gòu)造函數(shù),通過關(guān)鍵字base來調(diào)用。如:classIdentifierToken:Token{publicIdentifierToken(stringname):base(name)//此處調(diào)用的是基類的重載構(gòu)造函數(shù),假設(shè)不{//加此處代碼,那么調(diào)用的是默認(rèn)構(gòu)造函數(shù)…}…}virtual方法

本來就用于被覆蓋的方法稱為virtual方法。覆蓋方法的目的是提供同一個(gè)方法的不同實(shí)現(xiàn)。

例如,ToString方法作為System.Object的一個(gè)成員,用來將一個(gè)對(duì)象轉(zhuǎn)換成它的字符串形式,那它怎樣將一個(gè)派生類轉(zhuǎn)換成字符串呢?派生類可能包含任意數(shù)量的字段。實(shí)際上,ToString能做的是將一個(gè)對(duì)象轉(zhuǎn)換成代表其類型的一個(gè)字符串。而這種轉(zhuǎn)換沒有多大用途。System.Object中的ToString方法是像下面這樣定義的:namespaceSystem{classObject{publicvirtualstringToString(){…}…}…}override方法假設(shè)基類將一個(gè)方法聲明為virtual方法,派生類就可以使用override關(guān)鍵字來聲明該方法的另一個(gè)實(shí)現(xiàn)。

不允許使用virtual或override關(guān)鍵字來聲明一個(gè)private方法,否那么會(huì)得到一個(gè)編譯時(shí)錯(cuò)誤。兩個(gè)方法必須完全一致,也就是說,它們必須具有相同的名稱、相同的參數(shù)類型以及相同的返回類型。兩個(gè)方法必須有相同的可訪問性。假設(shè)其中一個(gè)方法是public的,那么另一個(gè)也必須是public的。只能覆蓋一個(gè)virtual方法,假設(shè)基類方法不是virtual的,那么覆蓋就不能實(shí)現(xiàn)。而C#中的方法默認(rèn)都不是virtual的。假設(shè)派生類不用override關(guān)鍵字來聲明方法,就不會(huì)覆蓋基類方法。換言之,它會(huì)成為完全不同的一個(gè)方法的實(shí)現(xiàn),只是恰巧與基類方法同名。一個(gè)override方法將隱式地成為virtual方法,它本身可在未來的一個(gè)派生類中被覆蓋。

Protected訪問public和private關(guān)鍵字代表著兩種極端的可訪問性:一個(gè)類的public字段和方法可由所有人訪問,而一個(gè)類的private字段和方法只能由類本身來訪問。

如果需要讓一個(gè)基類允許派生類訪問它的局部成員,同時(shí),在不屬于層次結(jié)構(gòu),即沒有繼承關(guān)系的類面前隱藏這些成員,在這種情況下,可以用protected關(guān)鍵字來標(biāo)記成員:派生類可以訪問一個(gè)protected基類成員。也就是說,在派生類中,一個(gè)protected基類成員相當(dāng)于public成員。如果類不是一個(gè)派生類,就不能訪問protected的類成員。也就是說,在不是派生類的一個(gè)類中,一個(gè)protected的類成員相當(dāng)于private成員。創(chuàng)立接口接口允許將一個(gè)方法的名稱和它的實(shí)現(xiàn)徹底隔絕。接口提供了一個(gè)標(biāo)準(zhǔn),只指出方法的名稱、返回類型和參數(shù)。方法具體是如何實(shí)現(xiàn)的,是從繼承接口的類中規(guī)定的。接口語法為了聲明一個(gè)接口,需要使用interface關(guān)鍵字interfaceIcomparable//接口名以大寫字母I開頭{intComareTo(objectobj);//方法主體替換成一個(gè)分號(hào)}不允許接口中包含任何字段;不允許在接口中包含任何構(gòu)造函數(shù);不允許提供一個(gè)訪問修飾符,接口中的所有方法都隱式地是public方法;不允許在接口中嵌套任何類型〔enum,struct,class,interface或delegate〕;不允許從struct或者class中繼承一個(gè)接口。實(shí)現(xiàn)接口

為了實(shí)現(xiàn)一個(gè)接口,需要聲明一個(gè)class或者struct,讓它們從接口繼承,然后實(shí)現(xiàn)所有接口方法。

如:要實(shí)現(xiàn)Icomparable中的方法,可以通過類來實(shí)現(xiàn),classComparable:

IComparable{…intIcomparable.CompareTo(objectobj)//顯式地實(shí)現(xiàn)接口的方法{…}}

方法和返回類型完全匹配;

任何參數(shù)完全匹配;

使用接口名作為方法名的前綴,這稱為顯式接口實(shí)現(xiàn);

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論