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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

專題一C#與NET平臺介紹

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

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

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

IntermediateLanguage

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

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

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

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

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

程序程序入口點,Main的返回類型為void控制臺類的WriteLine()方法用于顯示輸出結果導入System命名空間聲明命名空間Notepad將文件保存為*.cs第一個C#程序:HelloWorld1:usingSystem;第1行:using關鍵字類似C/C++的#include用來引用.NET框架類庫中的資源通常在程序文件的開頭使用如果程序中需要多種資源,可以使用多次usingSystem命名空間System命名空間提供了構建應用程序所需的系統統能的訪問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處理數據存取和管理,在定義ADO.NET技術中扮演重要角色System.IO管理對文件和流的同步和異步訪問System.Windows處理基于窗體的窗口的創建System.Reflection

包含從程序集讀取元數據的類System.Threading

包含用于多線程編程的類

System.Collections

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

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

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

WriteLine方法是Console類的方法。訪問類或對象的方法使用 點取符.來完成。字符串用雙引號“”表示字符串“Hello,World”是WriteLine方法的參數,表示屏幕輸出 的內容第一個C#程序:HelloWorldC#的數據類型及變量任務4系統預定義數據類型類型描

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

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

×

10?45

3.4

×

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

×

10?324至

1.7

×

10308,15位精度doubleval1=1.23;doubleval2=4.56D;bool布爾類型類型;一個布爾類型數據不是真就是假true,falseboolval1=true;boolval2=false;char字符類型;一個字符數據是一個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用戶自定義數據類型-枚舉枚舉和位標志namespaceMyHelloApp{classmyApp{[Flags]enumFabric{Cotton=1,Silk=2}staticvoidMain(){Fabricfab1=(Fabric)3;Console.WriteLine(fab1.ToString());

}}}用戶自定義數據類型-枚舉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));}}}}用戶自定義數據類型-枚舉structstructEx{publicintstructDataMember;

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

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關鍵字用于聲明常量變量的常見用法類型類別后綴示例/允許的值bool布爾無true或falseint整數無intx=100uint,ulog整數U或Uuintx=1000ulong,ulong長整型L或llongx=100000Lulong無符號長整型ul,uL,Ul,UL,lu,Lu,lU或LUulongx=4324ulfloat單精度浮點數類型F或ffloatx=34.76Fdouble雙精度浮點數類型D或ddoublex=763.7245Ddecimal精確十進制類型M或mdecimalx=1.544Mchar字符無charx=‘a’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轉換數字字符串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():將字符串轉換成小寫形式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);}需實現的功能:1、輸入yes時,程序循環執行2、兼容以下各種形式yes(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("繼續輸入郵箱嗎?");stringinput=Console.ReadLine();if(input.ToUpper()=="YES")continue;elsebreak;}}}}while(true)變量的常見用法String常用方法應用2輸入一個字符串,輸出每個單詞,重新用下劃線連接輸出使用Split()方法分割字符串使用Join()方法連接字符串變量的常見用法Split()方法——分割字符串代碼分析splitStrings=inputString.Split('');//將分割后的字符串使用下劃線連接在一起joinString=string.Join("_",splitStrings);返回值為字符串數組字符串變量名參數:分隔符(char型)返回字符串靜態方法參數1:連接符參數2:字符串數組關鍵代碼: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()方法用來格式化字符串關鍵代碼: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);參數與WritLine()方法相似變量的常見用法Format()的語法小結stringmyString=string.Format("格式字符串",參數列表);stringmyString=string.Format("{0}乘以

{1}等于

{2}",2,3,2*3);格式字符串代表參數列表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);變量的常見用法示例數組任務5數組數組是同一數據類型的一組值數組屬于引用類型,因此存儲在堆內存中數組元素初始化或給數組元素賦值都可以在聲明數組時或在程序的后面階段中進行

語法:數據類型[,…]數組名稱=new類型[n,…];

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

intcount;

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

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

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

string[]names=newstring[count];

//用一個for循環來接受姓名

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

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

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

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

//用foreach循環顯示姓名

foreach(stringdispinnames) {

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

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

//聲明一個值類型的整型數據類型

intvalue=130;

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

Test(value);

//由于該數據類型屬于值類型,所以將恢復其初始值

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

}staticvoidTest(intbyVal){

intt=20;

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

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

的引用傳遞給Test()

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

操作數2*執行乘法運算操作數1*

操作數2/執行除法運算操作數1/

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

操作數2++將操作數加1操作數++或++操作數--將操作數減1操作數--

或--操作數~將一個數按位取反

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

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

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

操作數1<

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

操作數1>=

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

操作數1<=

操作數2==檢查兩個值是否相等

操作數1==

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

操作數2運算符和表達式類別運算符說明表達式成員訪問運算符.用于訪問數據結構的成員數據結構.成員賦值運算符=給變量賦值操作數1=操作數2邏輯運算符&&對兩個表達式執行邏輯“與”運算

操作數1&&

操作數2||對兩個表達式執行邏輯“或”運算操作數1||

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

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

++;

相當于

Variable=Variable+1;Variable

--;

相當于

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

if(<條件>)

{

<語句塊>

}

else

{

<語句塊>

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

… break;

case值3:

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

語句可用于跳過當前循環并開始下一循環while循環do…while循環

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

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

這種循環用于將某個語句或語句塊重復執行預定次數的情形語法:for(初始值;

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

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

{

//語句

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

//存放字母的個數

intLetters=0;

//存放數字的個數

intDigits=0;

//存放標點符號的個數

int

Punctuations=0;

//用戶提供的輸入

stringinstr;

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

instr=Console.ReadLine();

//聲明foreach循環以遍歷輸入的字符串中的每個字符。

foreach(charchininstr)

{

//檢查字母

if(char.IsLetter(ch))

Letters++;

//檢查數字

if(char.IsDigit(ch))

Digits++;

//檢查標點符號

if(char.IsPunctuation(ch))

Punctuations++; }

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

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

Console.WriteLine(“標點符號個數為:{0}",Punctuations);}為所有計數器設置初始值接受輸入對輸入的每一個字符都進行循環使用了所有輸入的字符之后,循環自動終止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);} }}類和接口任務9為什么用類和接口

1、數據與方法分離

2、代碼不能重用

3、代碼不容易修改、擴充結構化程序設計的不足之處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#的面向對象特性所有東西都是對象:變量和方法的集合。初級特性:OO最基本的概念,即類和對象。中級特性:OO最核心的概念,即封裝、繼承和多態。高級特性:由初級特性和中級特性引出的一些問題,如構造函數的使用、覆蓋的規則、靜態變量和函數等。初級特性面向對象技術最基本的概念是類和對象:– 類是一個樣板,以操作、表示和算法的形式完整地定義了一組對象的行為。它通常也是面向對象語言中的模塊化、封裝和數據抽象的基礎。– 對象是類的一個實例,是一個軟件單元,它由一組結構化的數據和在其上的一組操作構成。抽象數據類型類實際上為實際的物體在計算機中定義了一種抽象數據類型。– 抽象數據類型是僅由數據類型和可能在這個數據類型上進行的操作定義的。– 使用者只能通過操作方法來訪問其屬性,不用知道這個數據類型內部各種操作是如何實現的。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;面向對象程序設計—封裝、代碼重用類:C#所有的代碼都是在某一個類中,因此不可能在類之外的全局區域有變量和方法。對象:C#中的對象相當于一塊內存區域,保存對象特有的類中所定義的數據。引用:C#中對于對象的操作全部通過引用進行。

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

chargender;//性別

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

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

}聲明一個對象引用:類名引用名Studentstudent;創建一個對象:new類構造函數student=newStudent();//如果缺少這一步編譯器會報錯使用對象:引用名.變量名/方法名(參數)student.id=200328013203194;引用與對象舉例引用類似于C++中的對象指針。但又有區別:在C#中”引用“是指向一個對象在內存中的位置,在本質上是一種帶有很強的完整性和安全性的限制的指針。當聲明某個類、接口或數組類型的一個變量時,變量的值總是某個對象的引用或者是null引用。指針就是簡單的地址而已,而引用除了表示地址而外,還是被引用的數據對象的縮影,可以提供其他信息。指針可以有++、--運算,引用不可以運算。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;}}類聲明常量字段構造函數成員屬性方法類的成員類成員的可訪問性類或結構的默認訪問類型是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;}}錯誤類成員的可訪問性示例構造函數構造函數是一種用于對象初始化的特殊方法,有以下特點。

–構造函數只能在對象創建時調用,即和new運算符一起被調用。

–構造函數和類具有相同的名字。

–構造函數可以有0個、1個或多個參數。

–構造函數沒有返回值。

–每個類至少有一個構造函數,一個類可以有多個構造函數。

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

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

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

Close();GC.SuppressFinalize(this);}~MyFile(){Close();}}classMyApp{publicstaticvoidMain(){MyFilefile=newFile();...file.Dispose();}}問題:–用Student對象保存學生信息,希望每個對象有一個單獨的編號。第一個創建的對象編號為0,第二個對象編號為1,以此類推。–這就需要有一個所有Student對象都能訪問的變量counter,而且變量counter在所有實例中共享。當一個對象創建時,構造函數增加counter值,下一個對象創建時使用增加過的值。解決方法:–C#編程語言沒有這樣的全局變量,但類變量是可以從類的任何實例訪問的單個變量。–類變量在某種程度上與其它語言中的全局變量相似。但僅限于同類型的對象訪問。類中的靜態問題靜態變量類變量是在所有類的實例(對象)中共享的變量,在變量聲明中用static關鍵字表示。類變量可以被標記為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);}}靜態方法類方法是不需要類的任何實例就可以被調用的方法,在方法聲明中用static關鍵字表示。類方法只能訪問靜態變量,訪問非靜態變量的嘗試會引起編譯錯誤。靜態方法不能被覆蓋成非靜態的。main是靜態的,因為它必須在任何實例化發生前被訪問,以便應用程序的運行。publicclassGeneralFunction{publicstaticintAddUp(intx,inty){//靜態方法

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

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

溫馨提示

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

評論

0/150

提交評論