交通信息系統(tǒng)-專題ppt_第1頁
交通信息系統(tǒng)-專題ppt_第2頁
交通信息系統(tǒng)-專題ppt_第3頁
交通信息系統(tǒng)-專題ppt_第4頁
交通信息系統(tǒng)-專題ppt_第5頁
已閱讀5頁,還剩148頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

專題一C#與NET平臺介紹

了解.NETFramework的結(jié)構(gòu)理解.NETFramework的基本概念CLRJITCTSMSIL了解.NETFramework命名空間了解C#程序的基本結(jié)構(gòu)教學(xué)目標C#簡介任務(wù)1C#語言的由來在過去的二十年里,C和C++已經(jīng)成為在商業(yè)軟件的開發(fā)領(lǐng)域中使用最廣泛的語言。它們?yōu)槌绦騿T提供了十分靈活的操作,不過同時也犧牲了一定的開發(fā)效率。與VB等語言相比,同等級別的C/C++應(yīng)用程序往往需要更長時間來開發(fā)。由于C/C++語言的復(fù)雜性,許多程序員都試圖尋找一種新的語言,希望能在功能與效率之間找到一個更為理想的權(quán)衡點。C#(Csharp)是對這一問題的解決方案。C#是一種新的、面向?qū)ο蟮木幊陶Z言。它使得程序員可以快速地編寫各種基于Microsoft.NET平臺的應(yīng)用程序,Microsoft.NET提供了一系列的工具和服務(wù)來最大程度地開發(fā)利用計算與通訊領(lǐng)域。

.NET的語言互操作性:不同語言編寫的代碼可互相調(diào)用C#的平臺移植性:框架JIT編譯器(JustInTime,即時編譯器)代碼被執(zhí)行C++VB編譯器編譯器可執(zhí)行代碼可執(zhí)行代碼RUNTIMERUNTIME.NET代碼的編譯

語言特定的編譯器和運行庫代碼被執(zhí)行C++VB編譯器編譯器可執(zhí)行代碼可執(zhí)行代碼RUNTIMERUNTIMEIL+元數(shù)據(jù)CLRIL和CLR的使用

IntermediateLanguage

CommonLanguageRuntime編譯執(zhí)行.NET程序MSIL+元數(shù)據(jù)機器代碼代碼被執(zhí)行CLR第一次編譯第二次編譯.NET程序被編譯兩次,第一次編譯很慢,而第二次編譯較快!語言編譯器.NET源代碼Microsoft中間語言MSIL+元數(shù)據(jù)機器代碼代碼被執(zhí)行CLRMSIL幫助語言實現(xiàn)互操作IL不是字節(jié)代碼,但很接近字節(jié)代碼。因此,執(zhí)行應(yīng)用程序時,IL到機器碼的轉(zhuǎn)換速度非???!通過CLR將MSIL轉(zhuǎn)換為具體CPU的代碼CPU無關(guān)的指令集語言編譯器.NET源代碼程序集module通用語言運行時CLRCLR.NET源代碼MSIL+元數(shù)據(jù)機器代碼代碼被執(zhí)行管理內(nèi)存易于設(shè)計組件和應(yīng)用程序,其對象可以跨語言互動跨語言集成(特別是跨語言繼承)JIT編譯器:一次編譯,就可運行在支持運行庫的任何CPU和操作系統(tǒng)上語言編譯器.NETFramework的體系結(jié)構(gòu)VisualStudio.NETCLR通用語言運行時(CLR)BaseClassLibrary:IO,Drawing,ThreadingDataandXMLXMLWebservicesWindowsFormsWebForms通用語言規(guī)范(CLS)VBC++C#…JScript操作系統(tǒng).NetFramework類庫(FCL)CLS和CTS通用語言規(guī)范CLS CommonLanguageSpecification規(guī)定所有.NET語言都應(yīng)遵循的規(guī)則生成可與其他語言互操作的應(yīng)用程序通用類型系統(tǒng)(CommonTypeSystem,CTS)包含標準數(shù)據(jù)類型包含準則集CLS、CTS和MSIL緊密配合以實現(xiàn)語言互操作性編譯和執(zhí)行C#應(yīng)用程序任務(wù)2第一個C#程序:HelloWorld

usingSystem;classHelloWorld{staticvoidMain(){Console.WriteLine(“Hello,World!”);console.readline();//此處用于觀看輸出結(jié)果;}}HelloWorld.cs輸出用CSC編譯搜索CSC.exe這個程序所在的文件路徑將這個路徑復(fù)制下來,右擊“我的電腦”-》“屬性”-》“高級”-》“環(huán)境變量”在“系統(tǒng)變量”選擇“path”,點“編輯”,將剛才復(fù)制的路徑添加到系統(tǒng)變量中,注意將不同路徑之間用分號隔開環(huán)境變量設(shè)置完畢。點擊開始-》運行-》輸入cmd,進入控制臺利用控制臺命令寫入當前存放代碼文件的文件夾,鍵入“cscFirst。cs”,回車運行,這時在該文件夾下找到First.Exe文件輸入First回車查看運行結(jié)果用CSC編譯用CSC編譯用CSC編譯CSC命令的用法用CSC編譯關(guān)于編譯結(jié)果EXE文件的說明用VisualStudio編譯單擊“開始”“程序”“MicrosoftVisualStudio.NET2005”“MicrosoftVisualStudio.NET2005”此時將打開VS.NET2005的起始頁要創(chuàng)建C#控制臺應(yīng)用程序,請從列表中選擇“創(chuàng)建建”“項目”。此時將打開“新建項目”窗口選擇“VisualC#項目”作為項目類型,選擇“控制臺應(yīng)用程序”作為模板

HelloWorld.csprojAssemblyInfo.csProgram.cs“HelloWorld”應(yīng)用程序文件用VisualStudio編譯要生成C#項目,請從菜單中選擇“生成”“生成解決方案”該過程將編譯項目中包括的所有文件,編譯結(jié)果顯示在“輸出”窗口中如果結(jié)果顯示“生成:1成功或最新,0失敗,0被跳過”,則說明已經(jīng)成功生成,然后即可交付該應(yīng)用程序用VisualStudio編譯要運行剛才生成的應(yīng)用程序,請從菜單中選擇“調(diào)試”“開始執(zhí)行(不調(diào)試)”輸出結(jié)果顯示在VS.NET控制臺窗口中用VisualStudio編譯C#應(yīng)用程序文件夾結(jié)構(gòu)VisualStudio.NET2005創(chuàng)建一個與項目同名的文件夾,此處為“HelloWorld”該文件夾包含項目文件“HelloWorld.csproj”和其他關(guān)聯(lián)文件每個新項目都創(chuàng)建了bin、obj和Properties三個文件夾。Bin和obj這兩個文件夾下都有一個Debug子目錄,其中包含可執(zhí)行文件HelloWorld.exe在“解決方案資源管理器”中啟用“顯示所有文件”選項,可查看“HelloWorld”項目的結(jié)構(gòu)用VisualStudio編譯C#的程序結(jié)構(gòu)任務(wù)3//這是用C#

編寫的一個簡單的HelloWorld程序usingSystem;namespaceNotepad{ classHelloWorld {

staticvoidMain() { Console.WriteLine("HelloWorld"); } }}聲明HelloWorld類描述代碼的注釋HelloWorld

程序程序入口點,Main的返回類型為void控制臺類的WriteLine()方法用于顯示輸出結(jié)果導(dǎo)入System命名空間聲明命名空間Notepad將文件保存為*.cs第一個C#程序:HelloWorld1:usingSystem;第1行:using關(guān)鍵字類似C/C++的#include用來引用.NET框架類庫中的資源通常在程序文件的開頭使用如果程序中需要多種資源,可以使用多次usingSystem命名空間System命名空間提供了構(gòu)建應(yīng)用程序所需的系統(tǒng)統(tǒng)能的訪問1.HclassA{…}2.HclassA{…}3.cpp#include“1.h”#include“2.h”….3.cppclassA{…}classA{…}…第一個C#程序:HelloWorldC++的命名空間用法namespacea1{classA{…}}namespacea2{classA{…}}3.csusinga1;usinga2;a1.Aa2.A第一個C#程序:HelloWorldC#的命名空間用法常用命名空間命名空間說明System.Drawing處理圖形和繪圖,包括打印System.Data處理數(shù)據(jù)存取和管理,在定義ADO.NET技術(shù)中扮演重要角色System.IO管理對文件和流的同步和異步訪問System.Windows處理基于窗體的窗口的創(chuàng)建System.Reflection

包含從程序集讀取元數(shù)據(jù)的類System.Threading

包含用于多線程編程的類

System.Collections

包含定義各種對象集的接口和類第一個C#程序:HelloWorld第一個C#程序:HelloWorld2:classHelloWorld3:{………..8:}第2,3,8行:類在C#或其他面向?qū)ο笳Z言中,需要編寫類使用關(guān)鍵字class定義一個類,類的內(nèi)容放在一對{}中示例中定義了一個名為HelloWorld的類第一個C#程序:HelloWorld4:staticvoidMain()5:{………..7:}第4,5,7行:Main方法Main方法是應(yīng)用程序的入口點,編譯器將由該處開始執(zhí)行程序方法體也放在一對{}中每個C#的應(yīng)用程序都必須包含Main方法4:staticvoidMain()5:{………..7:}第4,5,7行:Main方法static表示Main方法是一個全局方法void表示Main方法沒有任何返回值,即返回值是空參數(shù)放在小括號中定義。此處括號內(nèi)沒有內(nèi)容,表明Main方法沒有任何參數(shù)第一個C#程序:HelloWorld6:Console.WriteLine(“Hello,World!”);第6行:語句在C#中要執(zhí)行的指令語句之間用;分隔,編譯器通過分號來區(qū)分多個語句使用大括號{}標識某個代碼塊的開始和結(jié)束,從而可以對語句進行組合。大括號必須成對匹配。第一個C#程序:HelloWorld6:Console.WriteLine(“Hello,World!”);第6行:語句

HelloWorld程序的主要目的就是在屏幕上顯示一條問候 WriteLine方法用來將問候語寫到標準輸出設(shè)備上。

Console代表標準輸出設(shè)備---屏幕,它屬于System命名空間

WriteLine方法是Console類的方法。訪問類或?qū)ο蟮姆椒ㄊ褂?點取符.來完成。字符串用雙引號“”表示字符串“Hello,World”是WriteLine方法的參數(shù),表示屏幕輸出 的內(nèi)容第一個C#程序:HelloWorldC#的數(shù)據(jù)類型及變量任務(wù)4系統(tǒng)預(yù)定義數(shù)據(jù)類型類型描

述范圍/精度例子object所有其它類型的最根本的基礎(chǔ)類型objecto=null;string字符串類型,一個字符串是一個Unicode字符序列strings="Hello";sbyte8-bit有符號整數(shù)類型–128...127sbyteval=12;short16-bit有符號整數(shù)類型–32,768...32,767shortval=12;int32-bit有符號整數(shù)類型–2,147,483,648...2,147,483,647intval=12;long64-bit有符號整數(shù)類型–9,223,372,036,854,775,808...9,223,372,036,854,775,807longval1=12;longval2=34L;byte8-bit無符號整數(shù)類型0...255byteval1=12;byteval2=34U;ushort16-bit無符號整數(shù)類型0...65,535ushortval1=12;ushortval2=34U;uint32-bit無符號整數(shù)類型0...4,294,967,295uintval1=12;uintval2=34U;系統(tǒng)預(yù)定義數(shù)據(jù)類型類型描

述范圍/精度例子ulong64-bit無符號整數(shù)類型0...18,446,744,073,709,551,615ulongval1=12;ulongval2=34U;ulongval3=56L;ulongval4=78UL;float單精度浮點數(shù)類型1.5

×

10?45

3.4

×

1038,7位精度floatval=1.23F;double雙精度浮點數(shù)類型5.0

×

10?324至

1.7

×

10308,15位精度doubleval1=1.23;doubleval2=4.56D;bool布爾類型類型;一個布爾類型數(shù)據(jù)不是真就是假true,falseboolval1=true;boolval2=false;char字符類型;一個字符數(shù)據(jù)是一個Unicode字符charval='h';decimal精確十進制類型,有28個有效位1.0

×

10?28至

7.9

×

1028,28位精度decimalval=1.23M;[accessmodifiers]enum<identifier>[:enum_base]{enumbody}classMyApp{enumFabric:int{Cotton=1,Silk=2,Wool=4

}staticvoidMain(){Fabricfab=Fabric.Cotton;intfabNum=(int)fab;stringfabType=fab.ToString();Console.WriteLine(fab);}}整型,默認為int默認為internal用戶自定義數(shù)據(jù)類型-枚舉枚舉和位標志namespaceMyHelloApp{classmyApp{[Flags]enumFabric{Cotton=1,Silk=2}staticvoidMain(){Fabricfab1=(Fabric)3;Console.WriteLine(fab1.ToString());

}}}用戶自定義數(shù)據(jù)類型-枚舉System.Enum的方法usingSystem;namespaceApp1{classmyApp{enumFabric{Cotton=1,Silk=2}staticvoidMain(){stringfabStr="Cotton";if(Enum.IsDefined(typeof(Fabric),fabStr)){Fabricfab=(Fabric)Enum.Parse(typeof(Fabric),fabStr);Console.WriteLine(Enum.GetName(typeof(Fabric),2));}}}}用戶自定義數(shù)據(jù)類型-枚舉structstructEx{publicintstructDataMember;

publicvoidstructMethod1(){ //structMethod1實現(xiàn)}}自定義數(shù)據(jù)類型可以在其內(nèi)部定義方法無法實現(xiàn)繼承屬于值類型主要結(jié)構(gòu):structstudent{ publicintstud_id; publicstringstud_name; publicfloatstud_marks; publicvoidshow_details() { //顯示學(xué)生詳細信息 }}數(shù)據(jù)成員方法所有與Student關(guān)聯(lián)的詳細信息都可以作為一個整體進行存儲和訪問用戶自定義數(shù)據(jù)類型-結(jié)構(gòu)體變量

staticvoidMain(string[]args) {

//聲明布爾型、字符串型、整型、短整型和浮點型變量

boolt=false;

shortn1=30;

intn2=1200;

stringstr="jeny";

floatn3=23.1f;

//顯示變量值

Console.WriteLine("布爾值="+t);

Console.WriteLine("短整型值="+n1);

Console.WriteLine("整型值

="+n2);

Console.WriteLine("字符串值="+str);

Console.WriteLine("浮點值="+n3); }變量中存儲的值取決于該變量的類型常量staticvoidMain(string[]args){

//PI常量PI

constfloat_pi=3.1415169F;

//由地球引力引起的加速度常量,單位為cm/s*s

constfloat_gravity=980;

//鐘擺的長度

intlength=60;

//鐘擺的周期

doubleperiod=0;

//鐘擺周期的計算公式

period=2*_pi*Math.Sqrt(length/_gravity);

Console.WriteLine("鐘擺的周期為{0}秒",period);}聲明常量在表達式中使用常量const關(guān)鍵字用于聲明常量變量的常見用法類型類別后綴示例/允許的值bool布爾無true或falseint整數(shù)無intx=100uint,ulog整數(shù)U或Uuintx=1000ulong,ulong長整型L或llongx=100000Lulong無符號長整型ul,uL,Ul,UL,lu,Lu,lU或LUulongx=4324ulfloat單精度浮點數(shù)類型F或ffloatx=34.76Fdouble雙精度浮點數(shù)類型D或ddoublex=763.7245Ddecimal精確十進制類型M或mdecimalx=1.544Mchar字符無charx=‘a(chǎn)’string字符串無string=”abc”int:intiMax=int.MaxValue;intpVal=int.Parse(“100”);shorti16=50;inti32=i16;i16=i32;錯誤i16=(short)i32;decimaldecimaliRate=3.9834M;iRate=decimal.Round(iRate,2);//四舍五入iRate=decimal.Remainder(512.0M,51.0M);變量的常見用法boolboolbt=(bool)1;//錯誤charstringpattern=“123abcd?”;boolbt;bt=char.IsLetter(pattern,3);bt=char.IsNumber(pattern,3);bt=char.IsLower(pattern,3);bt=char.IsPunctuation(pattern,7);bt=char.IsLetterOrDigit(pattern,3);變量的常見用法single,doublefloatf=24567.66f;doubled=124.45;If(Single.IsNaN(1/0){…}使用Parse轉(zhuǎn)換數(shù)字字符串shortshParse=Int16.Parse("100");intiParse=Int32.Parse("100");longshParse=Int64.Parse("100");decimaldParse=decimal.Parse(“99.99");floatsParse=float.Parse(“99.99");doubledParse=double.Parse(“99.99");變量的常見用法字符串直接量stringpath;path=@”C:\note.txt”;path=“C:\\note.txt”;字符串操作索引字符串中的單個字符stringstr=“abcd”;charc=str[0];字符串連接strings1=“Myage=“;intmyAge=28;stringcat=s1+myAge;變量的常見用法字符串操作抽取和定位子串stringpoem=“InXanadudidKublaKhan”;stringpoemSeg=poem.Substring(10);poemSeg=poem.Substring(0,9);intindex=poem.IndexOf(“I”);index=poem.LastIndexOf(“n”);比較字符串boolisMatch;stringtitle="AncientMariner";isMatch=(title=="ANCIENTAMRINER");isMatch=(title.ToUpper()=="ANCIENTMARINER");isMatch=title.Equals("AncientMariner");變量的常見用法C#中常用的字符串處理方法:Equals():比較兩個字符串的值是否相等ToLower():將字符串轉(zhuǎn)換成小寫形式IndexOf():查找某個字符在字符串中的位置SubString():從字符串中截取子字符串Join():連接字符串Split():分割字符串Trim():去掉字符串兩邊的空格……變量的常見用法實例將一文件名的擴展名改為.dat。例:1.txt改為1.datusingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespace_011{classProgram{staticvoidMain(string[]args){stringfilename=@"1.2.txt";intindexDot=filename.LastIndexOf('.');stringextendName="dat";filename=filename.Substring(0,indexDot+1);filename+=extendName;Console.WriteLine(filename);}}}變量的常見用法已有如下代碼,按要求增加功能:staticvoidMain(string[]args){stringemail;//電子郵件地址

Console.WriteLine("請輸入你的郵箱:");email=Console.ReadLine();Console.WriteLine("你的郵箱是

{0}",email);}需實現(xiàn)的功能:1、輸入yes時,程序循環(huán)執(zhí)行2、兼容以下各種形式y(tǒng)es(YES、yes、YeS…..)3、提取郵箱的用戶名變量的常見用法usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespace_011{classProgram{staticvoidMain(string[]args){

while(1){stringemail;//電子郵件地址Console.WriteLine("請輸入你的郵箱:");email=Console.ReadLine();Console.WriteLine("你的郵箱是{0}",email);Console.WriteLine("繼續(xù)輸入郵箱嗎?");stringinput=Console.ReadLine();if(input.ToUpper()=="YES")continue;elsebreak;}}}}while(true)變量的常見用法String常用方法應(yīng)用2輸入一個字符串,輸出每個單詞,重新用下劃線連接輸出使用Split()方法分割字符串使用Join()方法連接字符串變量的常見用法Split()方法——分割字符串代碼分析splitStrings=inputString.Split('');//將分割后的字符串使用下劃線連接在一起joinString=string.Join("_",splitStrings);返回值為字符串數(shù)組字符串變量名參數(shù):分隔符(char型)返回字符串靜態(tài)方法參數(shù)1:連接符參數(shù)2:字符串數(shù)組關(guān)鍵代碼:Join()方法——連接字符串變量的常見用法usingSystem;classProgram{staticvoidMain(string[]args){stringinputString;inputString=Console.ReadLine();

inputString=inputString.Trim();string[]splitStrings=inputString.Split('');stringjoinString=string.Join("_",splitStrings);Console.WriteLine(joinString);}}如果字符串兩邊有空格?變量的常見用法Format()方法兩種輸出字符串的方式:stringname="李四";Console.WriteLine("Mynameis"+name+",Iam"+18);stringname="李四";Console.WriteLine("Mynameis

{0},Iam{1}",name,18);格式字符串變量列表變量的常見用法String類的Format()方法用來格式化字符串關(guān)鍵代碼:record=string.Format("姓名:{0}\n出生年月:{1}\n身高:{2}\n

血型:{3}\n星座:{4}\n最喜歡的食物:{5}",name,birthday,height,bloodType,planet,favourFood);Console.WriteLine("\n這是你的個人檔案:");Console.WriteLine(record);參數(shù)與WritLine()方法相似變量的常見用法Format()的語法小結(jié)stringmyString=string.Format("格式字符串",參數(shù)列表);stringmyString=string.Format("{0}乘以

{1}等于

{2}",2,3,2*3);格式字符串代表參數(shù)列表2乘以3等于6包括占位符{x}變量的常見用法補充下劃線處的占位符,輸出五個成語stringyi="一";stringer="二";stringsan="三";stringword=string.Format("獨

_無

_,_心

_意,垂涎

_尺,略知

__,舉_反

_",

yi,er,san);Console.WriteLine(word);stringyi="一";stringer="二";stringsan="三";stringword=string.Format("獨{0}無{1},{2}心{1}意,垂涎{2}尺,略知{0}{1},舉{0}反{2}",

yi,er,san);Console .WriteLine(word);變量的常見用法示例數(shù)組任務(wù)5數(shù)組數(shù)組是同一數(shù)據(jù)類型的一組值數(shù)組屬于引用類型,因此存儲在堆內(nèi)存中數(shù)組元素初始化或給數(shù)組元素賦值都可以在聲明數(shù)組時或在程序的后面階段中進行

語法:數(shù)據(jù)類型[,…]數(shù)組名稱=new類型[n,…];

int[]arrayHere=newint[6];數(shù)組staticvoidMain(string[]args){

intcount;

Console.WriteLine(“請輸入準備登機的乘客人數(shù)");

count=int.Parse(Console.ReadLine());

//聲明一個存放姓名的字符串數(shù)組,其長度等于乘客人數(shù)

string[]names=newstring[count];

//用一個for循環(huán)來接受姓名

for(inti=0;i<count;i++) {

Console.WriteLine(“請輸入第{0}個乘客的姓名",i+1);

names[i]=Console.ReadLine(); }

Console.WriteLine(“已登機的乘客有:");

//用foreach循環(huán)顯示姓名

foreach(stringdispinnames) {

Console.WriteLine("{0}",disp); }}數(shù)組聲明初始化數(shù)組元素的循環(huán)顯示輸出的循環(huán)一維數(shù)組和多維數(shù)組都屬于矩形數(shù)組,而C#所特有的不規(guī)則數(shù)組是數(shù)組的數(shù)組,在它的內(nèi)部,每個數(shù)組的長度可以不同,就像一個鋸齒形狀。(1)不規(guī)則數(shù)組的聲明語法形式:type[][][]arrayName;方括號[]的個數(shù)與數(shù)組的維數(shù)相關(guān)。例如:int[][]jagged;//jagged是一個int類型的二維不規(guī)則數(shù)組(2)創(chuàng)建數(shù)組對象以二維不規(guī)則數(shù)組為例:3.不規(guī)則數(shù)組值類型和引用類型任務(wù)6C#的基本數(shù)據(jù)類型C#中的數(shù)據(jù)類型分為兩個基本類別

值類型表示實際數(shù)據(jù)只是將值存放在內(nèi)存中值類型都存儲在堆棧中int、char、結(jié)構(gòu)引用類型表示指向數(shù)據(jù)的指針或引用包含內(nèi)存堆中對象的地址為null,則表示未引用任何對象類、接口、數(shù)組、字符串C#的基本數(shù)據(jù)類型staticvoidMain(string[]args){

//聲明一個值類型的整型數(shù)據(jù)類型

intvalue=130;

Console.WriteLine("該變量的初始值為{0}",value);

Test(value);

//由于該數(shù)據(jù)類型屬于值類型,所以將恢復(fù)其初始值

Console.WriteLine("該變量的值此時為{0}",value);

}staticvoidTest(intbyVal){

intt=20;

byVal=t*30;}將value的初始值傳遞給Test()方法不反映已經(jīng)改變的val值,而保留原始值C#的基本數(shù)據(jù)類型staticvoidMain(string[]args){ DataTypeobjTest=newDataType(); objTest.Value=130; //傳遞屬于引用類型的對象 Test(objTest); //由于該數(shù)據(jù)類型屬于引用類型,所以會考慮新處理的值 Console.WriteLine("變量的值為{0}",objTest.Value);}staticvoidTest(DataType

data){ intt=20; data.Val=temp*30;}將DataTypeTest

的引用傳遞給Test()

被傳遞的value在Test()中改變反映已經(jīng)改變的value值classDataType{publicintValue;}引用類型和值類型引用類型和值類型的內(nèi)存分配值類型存儲在運行棧,引用類型存儲在托管堆ApparelmyApparel=newApparel();ApparelmyApparel1=myApparel;ClassApparel{publicdoublePrice=250.0;publicstringFabType=“Syn”;}棧托管堆裝箱與拆箱裝箱即將值類型轉(zhuǎn)換為引用intage=17;ObjectrefAge=age拆箱即將引用類型轉(zhuǎn)換為值類型。intnewAge=(int)refAge;doublenewAge=(double)refAge;//錯誤,要具有相同類型運算符和表達式任務(wù)7運算符和表達式類別運算符說明表達式算術(shù)運算符+執(zhí)行加法運算(如果兩個操作數(shù)是字符串,則該運算符用作字符串連接運算符,將一個字符串添加到另一個字符串的末尾)操作數(shù)1+操作數(shù)2-執(zhí)行減法運算操作數(shù)1-

操作數(shù)2*執(zhí)行乘法運算操作數(shù)1*

操作數(shù)2/執(zhí)行除法運算操作數(shù)1/

操作數(shù)2%獲得進行除法運算后的余數(shù)操作數(shù)1%

操作數(shù)2++將操作數(shù)加1操作數(shù)++或++操作數(shù)--將操作數(shù)減1操作數(shù)--

或--操作數(shù)~將一個數(shù)按位取反

~操作數(shù)運算符和表達式類別運算符說明表達式三元運算符(條件運算符)?:檢查給出的第一個表達式expression是否為真。如果為真,則計算operand1,否則計算operand2。這是唯一帶有三個操作數(shù)的運算符

表達式?操作數(shù)1:操作數(shù)2運算符和表達式類別運算符說明表達式比較運算符>檢查一個數(shù)是否大于另一個數(shù)

操作數(shù)1>操作數(shù)2<檢查一個數(shù)是否小于另一個數(shù)

操作數(shù)1<

操作數(shù)2>=檢查一個數(shù)是否大于或等于另一個數(shù)

操作數(shù)1>=

操作數(shù)2<=檢查一個數(shù)是否小于或等于另一個數(shù)

操作數(shù)1<=

操作數(shù)2==檢查兩個值是否相等

操作數(shù)1==

操作數(shù)2!=檢查兩個值是否不相等操作數(shù)1!=

操作數(shù)2運算符和表達式類別運算符說明表達式成員訪問運算符.用于訪問數(shù)據(jù)結(jié)構(gòu)的成員數(shù)據(jù)結(jié)構(gòu).成員賦值運算符=給變量賦值操作數(shù)1=操作數(shù)2邏輯運算符&&對兩個表達式執(zhí)行邏輯“與”運算

操作數(shù)1&&

操作數(shù)2||對兩個表達式執(zhí)行邏輯“或”運算操作數(shù)1||

操作數(shù)2!對兩個表達式執(zhí)行邏輯“非”運算!操作數(shù)()將操作數(shù)強制轉(zhuǎn)換為給定的數(shù)據(jù)類型

(數(shù)據(jù)類型)操作數(shù)運算符和表達式9-6賦值運算符(=)變量=表達式;例如:身高=177.5;體重=78;性別=“m”;運算符和表達式9-7一元運算符(++/--)Variable

++;

相當于

Variable=Variable+1;Variable

--;

相當于

Variable=Variable-1;運算符和表達式運算符計算方法表達式求值結(jié)果(設(shè)X=10)+=運算結(jié)果=操作數(shù)1+操作數(shù)2X+=2X=X+212-=運算結(jié)果=操作數(shù)1-操作數(shù)2X-=2X=X-28*=運算結(jié)果=操作數(shù)1*操作數(shù)2X*=2X=X*220/=運算結(jié)果=操作數(shù)1/操作數(shù)2X/=2X=X/25%=運算結(jié)果=操作數(shù)1%操作數(shù)2X%=2X=X%20運算符和表達式C#運算符的優(yōu)先級優(yōu)先級說明運算符結(jié)合性1括號()從左到右2自加/自減運算符++/--從右到左3乘法運算符除法運算符取模運算符*/%從左到右4加法運算符減法運算符+-從左到右5小于小于等于大于大于等于<<=>>=從左到右6等于不等于=!=從左到右從左到右7邏輯與&&從左到右8邏輯或||從左到右9賦值運算符和快捷運算符=+=*=/=%=-=從右到左控制結(jié)構(gòu)任務(wù)8選擇結(jié)構(gòu)語法:

if(<條件>)

{

<語句塊>

}

else

{

<語句塊>

}選擇結(jié)構(gòu)用于根據(jù)表達式的值執(zhí)行語句if…else條件:只能是bool類型(布爾類型)的值選擇結(jié)構(gòu)switch(“cotton”){ case“COTTON”: case“cotton”:

… break;

case值3:

case值4: …break;}switch…case表達式可以是int、字符或字符串C#不允許從一個case塊繼續(xù)執(zhí)行到下一個case塊。每個case塊必須以一個跳轉(zhuǎn)控制語句break、goto或return結(jié)束多個case標簽可以對應(yīng)一個代碼塊循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)用于對一組命令執(zhí)行一定的次數(shù)或反復(fù)執(zhí)行一組命令,直到指定的條件為真。循環(huán)結(jié)構(gòu)的類型while循環(huán)do循環(huán)for循環(huán)foreach循環(huán)條件:只能是bool類型的值while循環(huán)反復(fù)執(zhí)行指定的語句,直到指定的條件為真語法:while(條件){//語句}break語句可用于退出循環(huán)continue

語句可用于跳過當前循環(huán)并開始下一循環(huán)while循環(huán)do…while循環(huán)

do…while循環(huán)與while循環(huán)類似,二者區(qū)別在于do…while循環(huán)中即使條件為假時也至少執(zhí)行一次該循環(huán)體中的語句。語法:

do{//語句}while(條件)for循環(huán)for循環(huán)要求只有在對特定條件進行判斷后才允許執(zhí)行循環(huán)

這種循環(huán)用于將某個語句或語句塊重復(fù)執(zhí)行預(yù)定次數(shù)的情形語法:for(初始值;

條件;增/減){//語句}foreach循環(huán)2-1foreach循環(huán)用于遍歷整個集合或數(shù)組語法:

foreach(數(shù)據(jù)類型元素(變量)in集合或者數(shù)組)

{

//語句

}foreach循環(huán)2-2staticvoidMain(string[]args){

//存放字母的個數(shù)

intLetters=0;

//存放數(shù)字的個數(shù)

intDigits=0;

//存放標點符號的個數(shù)

int

Punctuations=0;

//用戶提供的輸入

stringinstr;

Console.WriteLine("請輸入一個字符串");

instr=Console.ReadLine();

//聲明foreach循環(huán)以遍歷輸入的字符串中的每個字符。

foreach(charchininstr)

{

//檢查字母

if(char.IsLetter(ch))

Letters++;

//檢查數(shù)字

if(char.IsDigit(ch))

Digits++;

//檢查標點符號

if(char.IsPunctuation(ch))

Punctuations++; }

Console.WriteLine(“字母個數(shù)為:{0}",Letters);

Console.WriteLine(“數(shù)字個數(shù)為:{0}",Digits);

Console.WriteLine(“標點符號個數(shù)為:{0}",Punctuations);}為所有計數(shù)器設(shè)置初始值接受輸入對輸入的每一個字符都進行循環(huán)使用了所有輸入的字符之后,循環(huán)自動終止usingSystem;publicclassWriteTest{ publicstaticvoidMain() {int[]array={1,2,3,4,5};foreach(intiteminarray){Console.WriteLine(item);

} }}usingSystem;publicclassWriteTest{ publicstaticvoidMain() {int[]array={1,2,3,4,5};foreach(intiteminarray){

item+=item;

Console.WriteLine(item);} }}類和接口任務(wù)9為什么用類和接口

1、數(shù)據(jù)與方法分離

2、代碼不能重用

3、代碼不容易修改、擴充結(jié)構(gòu)化程序設(shè)計的不足之處voidSpeedUp(int&speed){if(speed<100)++speed;}voidmain(){intspeed=0;SpeedUp(speed);}

voidmain()

{

intdoorN_car1=2;

intcolor_car1=0;

intspeed_car1=100;

printf("%d%d%d\n",doorN_car1,color_car1,

speed_car1);

intdoorN_car2=4;

intcolor_car2=1;

intspeed_car2=80;

printf("%d%d%d\n",doorN_car2,color_car2,

speed_car2);}C#的面向?qū)ο筇匦运袞|西都是對象:變量和方法的集合。初級特性:OO最基本的概念,即類和對象。中級特性:OO最核心的概念,即封裝、繼承和多態(tài)。高級特性:由初級特性和中級特性引出的一些問題,如構(gòu)造函數(shù)的使用、覆蓋的規(guī)則、靜態(tài)變量和函數(shù)等。初級特性面向?qū)ο蠹夹g(shù)最基本的概念是類和對象:– 類是一個樣板,以操作、表示和算法的形式完整地定義了一組對象的行為。它通常也是面向?qū)ο笳Z言中的模塊化、封裝和數(shù)據(jù)抽象的基礎(chǔ)。– 對象是類的一個實例,是一個軟件單元,它由一組結(jié)構(gòu)化的數(shù)據(jù)和在其上的一組操作構(gòu)成。抽象數(shù)據(jù)類型類實際上為實際的物體在計算機中定義了一種抽象數(shù)據(jù)類型。– 抽象數(shù)據(jù)類型是僅由數(shù)據(jù)類型和可能在這個數(shù)據(jù)類型上進行的操作定義的。– 使用者只能通過操作方法來訪問其屬性,不用知道這個數(shù)據(jù)類型內(nèi)部各種操作是如何實現(xiàn)的。classCar{

publicintdoorN;

publicintcolor;

publicintspeed;

publicvoidSpeedUp(){speed+=10;}}classMyApp{ staticvoidMain(){ Carcar1; car1.doorN=2;car1.color=0;car1.speed=100; Carcar2; car2.doorN=4;car2.color=1;car2.speed=80; }}publicdoublespeed;面向?qū)ο蟪绦蛟O(shè)計—封裝、代碼重用類:C#所有的代碼都是在某一個類中,因此不可能在類之外的全局區(qū)域有變量和方法。對象:C#中的對象相當于一塊內(nèi)存區(qū)域,保存對象特有的類中所定義的數(shù)據(jù)。引用:C#中對于對象的操作全部通過引用進行。

類、對象和引用的聲明聲明一個類:訪問修飾字class類名{變量聲明,方法聲明}classStudent{longid;//學(xué)號

chargender;//性別

intclassID;//班級號,注意不能用class作屬性名

voidChangeClass(intaClassID)//更改班級{…}

}聲明一個對象引用:類名引用名Studentstudent;創(chuàng)建一個對象:new類構(gòu)造函數(shù)student=newStudent();//如果缺少這一步編譯器會報錯使用對象:引用名.變量名/方法名(參數(shù))student.id=200328013203194;引用與對象舉例引用類似于C++中的對象指針。但又有區(qū)別:在C#中”引用“是指向一個對象在內(nèi)存中的位置,在本質(zhì)上是一種帶有很強的完整性和安全性的限制的指針。當聲明某個類、接口或數(shù)組類型的一個變量時,變量的值總是某個對象的引用或者是null引用。指針就是簡單的地址而已,而引用除了表示地址而外,還是被引用的數(shù)據(jù)對象的縮影,可以提供其他信息。指針可以有++、--運算,引用不可以運算。publicclassFurniture{constdoublesalesTax=.065;privatedoublepurchPrice;privatestringvendor,inventoryID;publicFurniture(stringvendor,stringinventID,double

purchPrice){this.vendor=vendor;this.inventoryID=inventID;this.purchPrice=purchPrice;}publicstringMyVendor{get{returnvendor;}}publicdoubleCalcSalesTax(doublesalePrice){returnsalePrice*salesTax;}}類聲明常量字段構(gòu)造函數(shù)成員屬性方法類的成員類成員的可訪問性類或結(jié)構(gòu)的默認訪問類型是internal。類中所有的成員,默認均為private。classFurniture{constdoublesalesTax=.065;privatedoublepurchPrice;privatestringvendor,inventoryID;publicFurniture(stringvendor,stringinventID,double

purchPrice){this.vendor=vendor;this.inventoryID=inventID;this.purchPrice=purchPrice;}publicstringMyVendor{get{returnvendor;}}publicdoubleCalcSalesTax(doublesalePrice){returnsalePrice*salesTax;}}internalprivate類成員的可訪問性classMyApp{staticvoidMain(){Furnituref=newFurniture("aaa","001",1.2);

Console.WriteLine(f.salesTax);Console.WriteLine(Furniture.salesTax);f.purchPrice=10;stringstr=f.MyVendor;}}錯誤類成員的可訪問性示例構(gòu)造函數(shù)構(gòu)造函數(shù)是一種用于對象初始化的特殊方法,有以下特點。

–構(gòu)造函數(shù)只能在對象創(chuàng)建時調(diào)用,即和new運算符一起被調(diào)用。

–構(gòu)造函數(shù)和類具有相同的名字。

–構(gòu)造函數(shù)可以有0個、1個或多個參數(shù)。

–構(gòu)造函數(shù)沒有返回值。

–每個類至少有一個構(gòu)造函數(shù),一個類可以有多個構(gòu)造函數(shù)。

–如果沒有為類定義構(gòu)造函數(shù),系統(tǒng)會自動為其定義一個缺省的構(gòu)造函數(shù)。缺省構(gòu)造函數(shù)不帶參數(shù),作用是將實例變量都清零。

–一旦為類定義了構(gòu)造函數(shù),則系統(tǒng)不會再為其定義缺省構(gòu)造函數(shù)。C#中構(gòu)造函數(shù)有三種:實例構(gòu)造,私有構(gòu)造和靜態(tài)構(gòu)造創(chuàng)建對象與構(gòu)造函數(shù)類聲明后,可以創(chuàng)建類的實例,即對象。創(chuàng)建類的實例需要使用new關(guān)鍵字。類的實例相當于一個變量,創(chuàng)建類實例的格式如下:類名對象名=new構(gòu)造函數(shù)(參數(shù)類表);例如:PointmyPoint=newPoint();類的構(gòu)造函數(shù)可通過初始值設(shè)定項來調(diào)用基類的構(gòu)造函數(shù),例如:publicStudent(stringno,stringname,charsex,intage):base(name,sex,age){…}類的構(gòu)造函數(shù)也可通過關(guān)鍵字this調(diào)用同一個類的另一個構(gòu)造函數(shù),例如:publicPoint():this(0,20){…}構(gòu)造函數(shù)舉例classStudent{longid;chargender;intclassID;publicStudent():this(0,'F',0){}publicStudent(longaID,charaGender,intaClassID){id=aID;gender=aGender;classID=aClassID;}}私有構(gòu)造函數(shù)在某些特殊的情況下,使用私有構(gòu)造函數(shù)能夠達到意想不到的效果。比如,想建立這樣一個類:不允許被其他類實例化,但提供對外的靜態(tài)接口成員。在.NET框架類庫中就存在這樣的類,如System.Math類就不能夠?qū)嵗?,它的所有成員都是靜態(tài)的。用關(guān)鍵字private修飾的構(gòu)造函數(shù)就是私有構(gòu)造函數(shù)。析構(gòu)函數(shù)C#支持析構(gòu)函數(shù)。雖然C#能夠自動進行垃圾回收,但對于某些資源,.Net不知道如何回收,所以需要人工的內(nèi)存回收。在.net編程環(huán)境中,系統(tǒng)的資源分為托管資源和非托管資源。–托管資源,如簡單的int,string,float,DateTime等等,是不需要人工干預(yù)回收的。–非托管資源,例如文件,窗口或網(wǎng)絡(luò)連接,對于這類資源雖然垃圾回收器可以跟蹤封裝非托管資源的對象的生存期,但它不了解具體如何清理這些資源。在使用完之后,必須顯式的釋放他們,否則會占用系統(tǒng)的內(nèi)存和資源,而且可能會出現(xiàn)意想不到的錯誤。.net中超過80%的資源都是托管資源。析構(gòu)函數(shù)與Finalize.NETFramework提供Object.Finalize方法,默認情況下,F(xiàn)inalize方法不執(zhí)行任何操作。如果需要可以覆蓋Finalize方法。通過析構(gòu)函數(shù)可以自動生成Finalize方法和對基類的Finalize方法的調(diào)用。publicclassChair{publicChair(){...}~Chair(){...}

voidFinalize(){…}}如果試圖既編寫析構(gòu)函數(shù)又編寫Finalize方法,將導(dǎo)致編譯器出錯。析構(gòu)函數(shù)Dispose方法意義銷毀對象銷毀對象調(diào)用方式不能被顯示調(diào)用,在GC回收是被調(diào)用需要顯示調(diào)用或者通過using語句調(diào)用時機不確定確定,在顯示調(diào)用或者離開using程序塊非托管資源:Dispose方法對象析構(gòu)舉例?Dispose方法是編程人員需要立即釋放資源時調(diào)用,所以在Dispose方法中調(diào)用Close,并通知GC在回收垃圾時不需要再釋放資源。?析構(gòu)函數(shù)是編程人員在沒有調(diào)用Dispose方法釋放資源的情況下由GC在回收垃圾時調(diào)用。1.一般不要提供析構(gòu)函數(shù),因為它不能及時地被執(zhí)行;2.實現(xiàn)Dispose方法的時候,一定要加上“GC.SuppressFinalize(this)”語句。usingSystem;classMyFile{publicMyFile(){//…OpenFile}publicvoidClose(){//…CloseFile}publicvoidDispose(){

Close();GC.SuppressFinalize(this);}~MyFile(){Close();}}classMyApp{publicstaticvoidMain(){MyFilefile=newFile();...file.Dispose();}}問題:–用Student對象保存學(xué)生信息,希望每個對象有一個單獨的編號。第一個創(chuàng)建的對象編號為0,第二個對象編號為1,以此類推。–這就需要有一個所有Student對象都能訪問的變量counter,而且變量counter在所有實例中共享。當一個對象創(chuàng)建時,構(gòu)造函數(shù)增加counter值,下一個對象創(chuàng)建時使用增加過的值。解決方法:–C#編程語言沒有這樣的全局變量,但類變量是可以從類的任何實例訪問的單個變量。–類變量在某種程度上與其它語言中的全局變量相似。但僅限于同類型的對象訪問。類中的靜態(tài)問題靜態(tài)變量類變量是在所有類的實例(對象)中共享的變量,在變量聲明中用static關(guān)鍵字表示。類變量可以被標記為public或private。如果被標記為public,不需要類的實例就可以訪問。publicclassStudent{privateintserialNumber;

privatestaticintcounter=0;publicStudent(){serialNumber=counter;counter++;}}classMyApp{staticvoidMain(){Studentstu=newStudent();Console.WriteLine(stu.serialNumber);Studentstu1=newStudent();Console.WriteLine(stu1.serialNumber);}}靜態(tài)方法類方法是不需要類的任何實例就可以被調(diào)用的方法,在方法聲明中用static關(guān)鍵字表示。類方法只能訪問靜態(tài)變量,訪問非靜態(tài)變量的嘗試會引起編譯錯誤。靜態(tài)方法不能被覆蓋成非靜態(tài)的。main是靜態(tài)的,因為它必須在任何實例化發(fā)生前被訪問,以便應(yīng)用程序的運行。publicclassGeneralFunction{publicstaticintAddUp(intx,inty){//靜態(tài)方法

returnx+y;}}publicclassUseGeneral{publicvoidmethod(){intc=GeneralFunction.AddUp(9,10);//調(diào)用靜態(tài)方法

System.Console.WriteLine("addUp()gives"+c);}

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論