測繪程序設(shè)計復(fù)習(xí)過程課件_第1頁
測繪程序設(shè)計復(fù)習(xí)過程課件_第2頁
測繪程序設(shè)計復(fù)習(xí)過程課件_第3頁
測繪程序設(shè)計復(fù)習(xí)過程課件_第4頁
測繪程序設(shè)計復(fù)習(xí)過程課件_第5頁
已閱讀5頁,還剩78頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第二章編程基礎(chǔ)測繪程序設(shè)計概要內(nèi)容本章主要介紹了C#語言的基礎(chǔ)知識,內(nèi)容主要包括C#基本語法、數(shù)據(jù)類型、運算符和表達式。本章是后續(xù)章節(jié)的基礎(chǔ),學(xué)習(xí)完本章后,應(yīng)可以編寫簡單C#應(yīng)用程序。目錄2.1C#基本語法2.2變量簡介2.3C#數(shù)據(jù)類型2.4運算符與表達式小結(jié)2.1C#程序結(jié)構(gòu)C#代碼的外觀和操作方式與C++和JAVA類似C#編譯器不考慮代碼中的空格、回車符或者Tab字符。C#代碼由一系列語句組成,每個語句用分號來結(jié)束。C#是一種塊結(jié)構(gòu)的語言,所有的語句都是代碼塊的一部分。這些塊用花括號來界定{},代碼塊可以包含任意多行語句,或者不包含語句。注意花括號不需要帶分號。在C代碼中,經(jīng)常出現(xiàn)注釋語句。編譯器會忽略這些內(nèi)容。//XXXXX/*這段代碼由XXX編寫*/還需要說一點,C#代碼是區(qū)分大小寫的。必須使用正確的大小寫形式輸入代碼。Console.WriteLine(“helloworld!”);console.WriteLine(“helloworld!”);2.1C#基本語法控制臺程序基本結(jié)構(gòu)目錄2.1C#基本語法2.2變量簡介2.3C#數(shù)據(jù)類型2.4運算符與表達式小結(jié)2.2變量簡介數(shù)據(jù)是程序的必要組成部分,也是程序處理的對象變量關(guān)系到數(shù)據(jù)的存儲。實際上,可以把計算機內(nèi)存中的變量看作架子上的盒子。2.2變量簡介盡管計算機中所有數(shù)據(jù)事實上都是相同的東西,但變量有不同的內(nèi)涵,稱為類型(數(shù)據(jù)類型)。用盒子來類比,盒子有不同的形狀和尺寸,某些東西只能放在特定的盒子中。這個類型系統(tǒng)的另一個原因是,不同類型的數(shù)據(jù)需要不同的方法來處理。變量限定為不同的類型,可以避免混淆。例如,組成數(shù)字圖片的0和1序列與組成聲音文件的0和1序列,其處理方式是不同的。2.2變量簡介變量與內(nèi)存變量創(chuàng)建時,計算機都會給它分配一塊足夠大的內(nèi)存空間,來保存該類型的變量。相同類型的不同變量總是占據(jù)相同大小的內(nèi)存。不同類型的變量需要分配的內(nèi)存空間不一樣。使用變量使用變量就是聲明他們。<type><name>可以使用的變量類型是無限多的。其原因是可以自己定義類型,存儲各種復(fù)雜數(shù)據(jù)。盡管如此,總有一些數(shù)據(jù)類型是每個人都要使用的—簡單的預(yù)定義類型102.3C#數(shù)據(jù)類型CTS類型值類型與引用類型預(yù)定義類型變量常量類型轉(zhuǎn)換復(fù)合類型裝箱和拆箱112.3.1CTS類型CTS簡介:CTS(CommonTypeSystem)公共類型系統(tǒng),它定義了可以在中間語言使用的預(yù)定義數(shù)據(jù)類型,用于.NET語言都可以生成最終基于這些類型的編譯代碼。公共類型系統(tǒng)不僅指定基本數(shù)據(jù)類型,還定義了一個內(nèi)容豐富的類型層次結(jié)構(gòu)。12CTS類型層次引用類型值類型內(nèi)置值類型枚舉用戶定義的值類型指針類型接口類型自我描述類型委托封箱的值類型用戶定義的引用類型數(shù)組類類型CTS類型層次結(jié)構(gòu)圖132.3C#數(shù)據(jù)類型CTS類型值類型與引用類型預(yù)定義類型變量常量類型轉(zhuǎn)換復(fù)合類型裝箱和拆箱142.3.2值類型與引用類型數(shù)據(jù)類型分為值類型和引用類型兩種。從概念上看,值類型直接存儲其值,而引用類型存儲對值的引用。從在內(nèi)存中的存儲位置上看,值類型變量把數(shù)據(jù)存儲在棧中,引用類型變量把數(shù)據(jù)存儲在堆中。152.3.2值類型與引用類型值類型與引用類型在內(nèi)存中的存儲inti20inti=20;“hello”strings=“hello”;intj=i;stringt=s;stringssintj20stringtt162.3C#數(shù)據(jù)類型CTS類型值類型與引用類型預(yù)定義類型變量常量類型轉(zhuǎn)換復(fù)合類型裝箱和拆箱172.3.3預(yù)定義類型預(yù)定義數(shù)據(jù)類型是由C#語言和.NET框架提供的,每個預(yù)定義類型都映射為CTS中定義的類型。C#中有15個預(yù)定義類型,其中有13個值類型和兩個引用類型(string和object)。182.3.3預(yù)定義類型(值類型)預(yù)定義的值類型C#關(guān)鍵字.NETCTS類型值類型位數(shù)SbyteSystem.SByte整數(shù)8shortSystem.Int16整數(shù)16intSystem.Int32整數(shù)32longSystem.Int64整數(shù)64byteSystem.Byte整數(shù)8ushortSystem.Uint16整數(shù)16uintSystem.Uint32整數(shù)32ulongSystem.Uint64整數(shù)64floatSystem.Single浮點32doubleSystem.Double浮點64decimalSystem.Decimal高精度小數(shù)128boolSystem.Boolean布爾值1charSystem.Char整數(shù)16說明-128~127-32768~32767-2147483648~2147483647-9223372036854775808~92233720368547758070~2550~655350~42949672950~18446744073709551615true或false表示一個16位(Unicode)的字符19(1)shortint類型Short和int類型分別對應(yīng)CTS中的int16和int32,當(dāng)你需要一個整數(shù)變量時,可以這樣聲明:一些變量名稱前的‘u’表示不能在這些類型中存儲負數(shù),相應(yīng)的整數(shù)存儲范圍變大。intmyInt=32768;20(2)floatdouble類型Float和double類型對應(yīng)CTS中的single和double,當(dāng)你需要一個浮點數(shù)時,而不是整數(shù)時可以這樣聲明:一些其他的類型bool是C#中最常見的一種變量類型,但編寫應(yīng)用程序的邏輯流程時,一個可以是ture或false的變量具有非常重要的分支作用。2.3.3預(yù)定義類型(值類型)doublemyDouble=3.14159262;212.3.3預(yù)定義類型(值類型)(3)char類型存儲單個字符。一些字符不能直接放在引號中,必須使用轉(zhuǎn)義字符,這些轉(zhuǎn)義字符如下表所示。char的雙重身份:

char的具有雙重身份。它表示字符但卻被看作是整數(shù)家族的一部分,它表示的值是一個無符號的整數(shù),范圍在0~65535。它可以參與計算,并可以隱式轉(zhuǎn)換成int、long、ushort、uint和ulong。222.3.3預(yù)定義類型(值類型)(2)char類型

轉(zhuǎn)義字符表232.3.4預(yù)定義類型(引用類型)預(yù)定義的引用類型C#支持兩個預(yù)定義引用類型,如下表所示:

242.3.4預(yù)定義類型(引用類型)(1)object類型object類型是從所有內(nèi)在和用戶定義的類型中派生而來的最終父類型,所有類型都隱含地最終派生于System.Object類。(1)object類型object類型可用于兩個目的:1)使用object引用綁定任何特定子類型的對象,例如:2)object類型執(zhí)行基本用途的方法,Equals()、GetHashCode()、GetType()和ToString()等等。

252.3.4預(yù)定義類型(引用類型)inti=20;objecto=i;262.3.4預(yù)定義類型(引用類型)(2)string類型字符串變量是包含字母或數(shù)字字符的序列,它可以用來存放計算機或查詢操作的輸入信息。注意:對組成字符串的字符數(shù)沒有限制。272.3.4預(yù)定義類型(引用類型)(2)string類型聲明字符串變量:stringmyStr1=“hello”;stringmyStr2=“world”;stringmyStr3=myStr1+myStr2;C#的string類型可以用“+”直接連接,結(jié)果

myStr3=

“helloworld”(2)string類型字符串中也可以包括轉(zhuǎn)義字符:結(jié)果如下:282.3.4預(yù)定義類型(引用類型)string的永恒性C#中,創(chuàng)建一個string對象后,它所代表的字符集不能修改。當(dāng)把一個字符串變量賦給另一個字符串時,會得到內(nèi)存中同一個字符串的兩個引用。但是,修改其中一個字符串,注意這會創(chuàng)建一個全新的string對象,而另一個字符串沒有改變。stringsample=“hello\nworld”;helloworld2.3.4預(yù)定義類型(引用類型)(2)string類型請考慮下邊的過程:

strings1=“astring”;strings2=s1;s1=“anotherstring”;strings1s1strings2s2“anothestring”“astring”對s1的修改是通過String類的各種方法來實現(xiàn)的,預(yù)定義的方法不會直接修改內(nèi)存中的這個String,而是構(gòu)造一個新的String。所以在表面上看上去象是修改沒有影響到原字符串。

(2)string類型verbatim字符串通過加前綴@,使編譯器嚴格按照原樣對其編譯。字符串各種格式和轉(zhuǎn)義字符將按原樣輸出。如:302.3.4預(yù)定義類型(引用類型)strings=@“hello\nworld”;hello\nworld結(jié)果輸出:(2)string類型verbatim字符串注意:引號是唯一例外,編譯器必須將其轉(zhuǎn)義,例如,生成字符串“Hello”的代碼如下:輸出結(jié)果為:

312.3.4預(yù)定義類型(引用類型)strings=@“““Hello”””;注意:Hello的兩邊都有3個引號

“Hello”注:轉(zhuǎn)義字符處理一對322.3C#數(shù)據(jù)類型CTS類型值類型與引用類型預(yù)定義類型變量常量類型轉(zhuǎn)換復(fù)合類型裝箱和拆箱(1)聲明變量語法:例如:該語句用public訪問級聲明int變量i。332.3.5變量[modifiers]datatypeidentifier;publicinti;342.3.5變量(2)標識符(identifier)標識符是給變量、用戶定義的類型和這些類型的成員指定的名字。C#變量命名的基本規(guī)則:變量名首字符必須是字母、下劃線(“_”)或“@”;其后字符必須是字母、下劃線或數(shù)字;切忌使用C#關(guān)鍵字。如果需要使用,須在標識符前邊加上“@”(如@abstract)。352.3.5變量(2)標識符(identifier)練習(xí):下邊哪些變量的命名是正確的

myBigVar99BottleOfBeernamespaceVAR1_testIt’s-All-Over帶紅色下劃線的變量名是正確的362.3.5變量(2)標識符(identifier)以下列出了命名變量的一些約定:給變量分配有意義的名稱;命名類和方法時使用PascalCase樣式,命名變量使用camelCase樣式。不要通過大小寫的不同來區(qū)分變量。變量命名的兩種常用大小寫樣式Pascal樣式-名字中每個單詞的第一個單詞大寫,AverageSpeed;

Camel樣式-與Pascal樣式基本相同,不同的是標識符的第一個單詞小寫,如averageSpeed.(3)初始化變量變量聲明后,我們必須初始化該變量。372.3.5變量classTest{staticvoidMain(){intmyTest=8;System.Console.WriteLine(myTest);}}Errorcs0165:Useofunassignedlocalvariable‘myTest’intmyTest;(3)初始化變量另外,注意初始值要與聲明的類型相一致可以通過附加后綴來指定數(shù)值類型

382.3.5變量stringmyString=34.50;//錯誤stringmyString=“34.50”;//正確392.3.5變量(3)初始化變量可使用的后綴如下表:402.3.5變量(4)變量的作用域classProgram

{staticvoidMain(string[]args)

{stringmyString="stringdefinedinMain";write();Console.ReadKey();

}staticvoidwrite()

{Console.WriteLine("myString={0}",myString);

}

}

staticvoidMain(string[]args)

{stringmyString="stringdefinedinMain";

write();Console.WriteLine("\nNowintheMain");Console.WriteLine("myString={0}",myString);Console.ReadKey();

}staticvoidwrite()

{stringmyString="stringdefinedinWrite";Console.WriteLine("myString={0}",myString);

}示例422.3.5變量(4)變量的作用域變量的作用域是可以訪問該變量的代碼區(qū)域。作用域的確定規(guī)則:只要字段所屬的類在某個作用域內(nèi),其字段也在該作用域內(nèi);局部變量存在于表示聲明該變量的塊語句結(jié)束的封閉花括號之前的作用域內(nèi);在循環(huán)或類似的語句中聲明的局部變量存在于該循環(huán)體內(nèi)。(5)字段和局部變量考慮下邊的代碼:

432.3.5變量usingSystem;ClassScopeTest{staticintj=20;publicstaticvoidMain(){intj=30;Console.WriteLine(j);return;}}定義了兩個j,能通過編譯嗎?442.3.5變量(5)字段和局部變量C#使得在變量之間有一個基本的區(qū)分,它把聲明為類型級的變量看作是字段,而把在方法中聲明的變量看作局部變量。所以前邊的代碼可以通過編譯,運行結(jié)果是30!此時,在Main方法中聲明的變量j隱藏了同名的類級別的變量。Program.j??(6)修飾符修飾符用于限定類型以及類型成員的聲明。C#語言共有13種修飾符,按功能可以分成3部分:類修飾符成員修飾符訪問修飾符452.3.5變量462.3.5變量(6)修飾符訪問修飾符472.3.5變量(6)修飾符以下是訪問修飾符的一些規(guī)則:命名空間總是默認為public;類總是默認為public;類成員默認為private;(與C++不同)對于一個類成員只能使用一個訪問修飾符,protectedinternal盡管是2個單詞,但它是單個訪問修飾符;成員的作用域永遠不超出包含它的類。482.3C#數(shù)據(jù)類型CTS類型值類型與引用類型預(yù)定義類型變量常量類型轉(zhuǎn)換復(fù)合類型裝箱和拆箱語法:

注意:聲明常量時必須對其賦值。例:

492.3.6常量consttype-nameconstant=value;constfloatpi=3.14f;constintearthRadius=6378;502.3C#數(shù)據(jù)類型CTS類型值類型與引用類型預(yù)定義類型變量常量類型轉(zhuǎn)換復(fù)合類型裝箱和拆箱512.3.7類型轉(zhuǎn)換隱式轉(zhuǎn)換(implicitconversion)顯式轉(zhuǎn)換(explicitconversion)(2)顯式轉(zhuǎn)換方式:語法如下:例:522.3.7類型轉(zhuǎn)換typevariable1=(cast-type)variable2;intx=500;shortz=(short)x;532.3.7類型轉(zhuǎn)換(2)顯式轉(zhuǎn)換方式:考慮下邊的代碼:

decimald=1234.56M;intx=(int)d;轉(zhuǎn)換的結(jié)果是,x值為1234longval=3000000000;inti=(int)val;編譯器不會報錯,但i中結(jié)果卻是-1294967296542.3.7類型轉(zhuǎn)換(2)顯式轉(zhuǎn)換方式:注意:

顯式轉(zhuǎn)換是一種危險操作,它可能導(dǎo)致數(shù)據(jù)丟失,或數(shù)據(jù)溢出,從而得不到所需的結(jié)果,所以在執(zhí)行顯式轉(zhuǎn)換之前一定要清楚自己在做什么。552.3.7類型轉(zhuǎn)換(2)顯式轉(zhuǎn)換方式:Convert.ToInt32、int.Parse、int.TryParse、(int)四者都可以將類型轉(zhuǎn)換為

int,其區(qū)別是:Convert.ToInt32

int.Parse

較為類似,實際上

Convert.ToInt32

內(nèi)部調(diào)用了

int.Parse:Convert.ToInt32參數(shù)為

null時,返回

0;int.Parse參數(shù)為

null時,拋出異常。Convert.ToInt32參數(shù)為

""時,拋出異常;Int.Parse參數(shù)為

""時,拋出異常。Convert.ToInt32可以轉(zhuǎn)換的類型較多;int.Parse只能轉(zhuǎn)換數(shù)字類型的字符串。562.3C#數(shù)據(jù)類型CTS類型值類型與引用類型預(yù)定義類型變量常量類型轉(zhuǎn)換復(fù)合類型裝箱和拆箱572.3.8復(fù)合類型除了前面介紹的預(yù)定義類型外,C#和.NETFramework還允許用戶根據(jù)這些簡單類型定義復(fù)合類型。與基本類型一樣,復(fù)合類型可以分為值類型和引用類型(1)結(jié)構(gòu)(struct)語法:582.3.8復(fù)合類型(值類型)[modifier]structidentifier[:interface]{memberofstruct;}592.3.8復(fù)合類型(值類型)(1)結(jié)構(gòu)(struct)memberofstruct包括:構(gòu)造函數(shù)(Constructor)、常數(shù)(Destructor)、字段(Fields)、方法(Methods)、屬性(Attribute)、索引(Indexes)、操作符(Operators)和嵌套(Nested)類型。602.3.8復(fù)合類型(值類型)(1)結(jié)構(gòu)(struct)示例:

定義一個水準網(wǎng)間接平差的結(jié)構(gòu)類型,用于保存某條路線的信息,包括:起始點號、終止點號、高差、權(quán)。61

classProgram

{structLevelLine

{publicstringqPoint;publicstringzPoint;publicdoublelDispersion;publicdoublelWeight;publicdoublegetlWeight()

{return1/lWeight;

}

}staticvoidMain(string[]args)

{LevelLineabc;abc.qPoint="A";abc.zPoint="B";abc.lDispersion=0.25;abc.lWeight=4;Console.WriteLine("{0}到{1}路線的權(quán)為{2}",abc.qPoint,abc.zPoint,abc.getlWeight());Console.ReadKey();

}

}程序代碼如下:622.3.8復(fù)合類型(值類型)(1)結(jié)構(gòu)(struct)從功能上看結(jié)構(gòu)就像一個小型的類,但二者還是有很大區(qū)別:第一,結(jié)構(gòu)是一個值類型,它存儲在棧中,而類是一個引用類型,它存儲在堆中。第二,結(jié)構(gòu)不允許繼承。第三,在結(jié)構(gòu)中不允許聲明一個沒有參數(shù)的構(gòu)造函數(shù),而類是允許的。第四,在結(jié)構(gòu)中不允許不允許有實例字段初始值設(shè)定項。

632.3.8復(fù)合類型(值類型)publicstructRect{publicintx1=1;……}ErrorCS0573:“Rect.x1”:結(jié)構(gòu)中不能有實例字段初始值設(shè)定項642.3C#數(shù)據(jù)類型CTS類型值類型與引用類型預(yù)定義類型變量常量類型轉(zhuǎn)換復(fù)合類型裝箱和拆箱(1)裝箱(Boxing)考慮下邊的代碼:

問題:j不過是棧上一個4字節(jié)的值,它是如何調(diào)用方法的?652.3.9裝箱和拆箱

Intj=10;strings=j.ToString();(1)裝箱(Boxing)C#提供了一個有點魔術(shù)性的方式-裝箱!裝箱可以把值類型轉(zhuǎn)換為引用類型,上例中的該轉(zhuǎn)換是隱式進行的,還可以手工轉(zhuǎn)換:662.3.9裝箱和拆箱inti=20;objecto=i;672.3.9裝箱和拆箱(1)裝箱(Boxing)第二條初始化語句中,o包含的引用并不指向i,因為i在棧中,引用指向棧將嚴重影響程序的健壯性(還會產(chǎn)生潛在的安全漏洞)。作為替代,在堆中會產(chǎn)生i的一個精確拷貝,并將變量o的引用指向該拷貝-這種自動拷貝就是裝箱!(1)裝箱(Boxing)裝箱過程如下圖所示682.3.9裝箱和拆箱棧堆inti20objectointi=20;objecto=i;裝箱20(2)拆箱(Unboxing)拆箱用于把引用類型轉(zhuǎn)換為值類型,其中引用類型的值轉(zhuǎn)換為值類型。其語法類似于顯式類型轉(zhuǎn)換:

692.3.9裝箱和拆箱

objecto=42;inti=(int)o;702.3.9裝箱和拆箱(2)拆箱(Unboxing)拆箱過程如下圖所示棧堆objectointi=(int)o;objecto=42;42inti=(int)o42拆箱712.3.9裝箱和拆箱(2)拆箱(Unboxing)需要注意的是,在把引用類型轉(zhuǎn)為值類型的時候,必須確保得到的值變量有足夠的空間存儲值類型中所有的字節(jié)。例:

longa=33333423;objectb=(object)a;intc=(int)b;CLR會拋出一個異常:

“未處理的異常:system.InvalidCastException:指定的轉(zhuǎn)換無效”目錄2.1C#基本語法2.2變量簡介2.3C#數(shù)據(jù)類型2.4運算符與表達式小結(jié)73

溫馨提示

  • 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論