版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上 C# 基礎(chǔ)知識點(diǎn)1、 數(shù)據(jù)類型1.1、 值類型、引用類型1.2、 預(yù)定義類型1.3、 類型轉(zhuǎn)換1.4、 裝箱和拆箱2、 變量、常量2.1、變量2.2、常量3、 運(yùn)算符和表達(dá)式3.1、運(yùn)算符、表達(dá)式3.2、特殊運(yùn)算符3.3、優(yōu)先級別4、 流程控制4.1、條件語句4.2、循環(huán)語句4.3、跳轉(zhuǎn)語句4.4、異常處理5、 程序結(jié)構(gòu)5.1、類5.2、命名空間5.3、Main方法6、程序例子7、作業(yè)一 數(shù)據(jù)類型1.1 值類型、引用類型C# 的數(shù)據(jù)類型可以分成兩大部分:值類型和引用類型。值類型的變量總是直接包含著自身的數(shù)據(jù),而引用類型的變量是指向?qū)嶋H數(shù)據(jù)的地址。C# 值類型包括:整
2、型、布爾型、實(shí)型、十進(jìn)制型、結(jié)構(gòu)和枚舉、接口和數(shù)組。從概念上看,其區(qū)別是值類型直接存儲其值,而引用類型存儲對值的引用。這兩種類型存儲在內(nèi)存的不同地方:值類型存儲在堆棧中,而引用類型存儲在托管堆上。注意區(qū)分某個(gè)類型是值類型還是引用類型,因?yàn)檫@種存儲位置的不同會(huì)有不同的影響。例如,int是值類型,這表示下面的語句會(huì)在內(nèi)存的兩個(gè)地方存儲值20: / i 和j都是整型變量i = 20;j = i;但考慮下面的代碼。這段代碼假定已經(jīng)定義了一個(gè)類class1,class1是一個(gè)引用類型,它有一個(gè)int類型的成員變量Value: class1 x, y x = new class1 ();x.Value =
3、 30; y = x;Console.WriteLine(y.Value);/輸出30y.Value = 50;Console.WriteLine(x.Value);/輸出50要理解的重要一點(diǎn)是在執(zhí)行這段代碼后,只有一個(gè)class1對象。x和y都指向包含該對象的內(nèi)存位置。因?yàn)閤和y是引用類型的變量,聲明這兩個(gè)變量只是保留了一個(gè)引用而不會(huì)實(shí)例化給定類型的對象。因?yàn)閤和y引用同一個(gè)對象,所以對x的修改會(huì)影響y,反之亦然。因此上面的代碼會(huì)顯式30和50。 如果變量是一個(gè)引用,就可以把其值設(shè)置為null,確定它不引用任何對象: y = null;在C#中,基本數(shù)據(jù)類型如bool和long都是值類型。如
4、果聲明一個(gè)bool變量,并給它賦予另一個(gè)bool變量的值,在內(nèi)存中就會(huì)有兩個(gè)bool值。如果以后修改第一個(gè)bool變量的值,第二個(gè)bool變量的值也不會(huì)改變。這些類型是通過值來復(fù)制的。相反,大多數(shù)更復(fù)雜的C#數(shù)據(jù)類型,包括我們自己聲明的類都是引用類型。它們分配在堆中,其生存期可以跨多個(gè)函數(shù)調(diào)用,可以通過一個(gè)或幾個(gè)別名來訪問。CLR(Common Language Runtime公共語言運(yùn)行庫指.NET的運(yùn)行時(shí)支持,包括一個(gè)面向?qū)ο箢愋拖到y(tǒng)和一些運(yùn)行時(shí)服務(wù))執(zhí)行一種精細(xì)的算法來跟蹤哪些引用變量仍是可以訪問的,哪些引用變量已經(jīng)不能訪問了。CLR會(huì)定期進(jìn)行清理,刪除不能訪問的對象,把它們占用的內(nèi)存返
5、回給操作系統(tǒng)。這是通過垃圾收集器實(shí)現(xiàn)的。1.2 預(yù)定義類型C#認(rèn)可的基本預(yù)定義類型并沒有內(nèi)置于語言中,而是內(nèi)置于.NET Framework中。例如,在C#中聲明一個(gè)int類型的數(shù)據(jù)時(shí),聲明的實(shí)際上是.NET結(jié)構(gòu)System.Int32的一個(gè)實(shí)例。C#支持兩個(gè)預(yù)定義的引用類型,如下表:CTS:公共類型系統(tǒng)名 稱CTS 類說 明ObjectSystem.Object根類型,其他類型都是從它派生而來的(包括值類型) StringSystem.StringUnicode字符串1. object類型在C#中,object類型就是最終的父類型,所有內(nèi)在和用戶定義的類型都從它派生而來。這是C#的一個(gè)重要特
6、性, object類型就可以用于兩個(gè)目的: 可以使用object引用綁定任何特定子類型的對象。 object類型執(zhí)行許多基本的一般用途的方法,包括Equals()、GetHashCode()、GetType()和ToString()。用戶定義的類可能需要使用一種面向?qū)ο蠹夹g(shù) 重寫,提供其中一些方法的替代執(zhí)行方法。例如,重寫ToString()時(shí),要給類提供一個(gè)方法,該方法可以提供類本身的字符串表示。如果類中沒有提供這些方法的實(shí)現(xiàn),編譯器就會(huì)在對象中選擇這些實(shí)現(xiàn),它們在類中的執(zhí)行不一定正確。2. string類型C#有string關(guān)鍵字,在翻譯為.NET類時(shí),它就是System.string。有
7、了它,像字符串連接和字符串復(fù)制這樣的操作就很簡單了: string str1 = "Hello "string str2 = "World"string str3 = str1 + str2; / 字符串連接盡管這是一個(gè)值類型的賦值,但string是一個(gè)引用類型。String對象保留在堆上,而不是堆棧上。因此,當(dāng)把一個(gè)字符串變量賦給另一個(gè)字符串時(shí),會(huì)得到對內(nèi)存中同一個(gè)字符串的兩個(gè)引用。但是,string與引用類型在常見的操作上有一些區(qū)別。例如,修改其中一個(gè)字符串,注意這會(huì)創(chuàng)建一個(gè)全新的string對象,而另一個(gè)字符串沒有改變??紤]下面的代碼: using
8、 System;class StringExample public static int Main() string s1 = "a string" string s2 = s1; Console.WriteLine("s1 is " + s1); Console.WriteLine("s2 is " + s2); s1 = "another string" Console.WriteLine("s1 is now " + s1); Console.WriteLine("s2 is
9、now " + s2); return 0; 其輸出結(jié)果為:s1 is a strings2 is a strings1 is now another strings2 is now a string換言之,改變s1的值對s2沒有影響,這與我們期待的引用類型正好相反。1.3類型轉(zhuǎn)換1.隱式轉(zhuǎn)換隱式轉(zhuǎn)換就是系統(tǒng)默認(rèn)的、不需要加以聲明就可以進(jìn)行的轉(zhuǎn)換。 隱式轉(zhuǎn)換一般不會(huì)失敗,轉(zhuǎn)換過程中也不會(huì)導(dǎo)致信息丟失。隱式轉(zhuǎn)換包括下面幾種:2.顯式轉(zhuǎn)換顯式類型轉(zhuǎn)換,就是強(qiáng)制類型轉(zhuǎn)換。與隱式轉(zhuǎn)換正好相反,顯式轉(zhuǎn)換需要用戶明確指定轉(zhuǎn)換的類型,不如看下面例子: long l = 5000; int I =
10、(int)l;顯式轉(zhuǎn)換可以發(fā)生在表達(dá)式的計(jì)算過程中。它并不是總能成功,而且常??赡芤鹦畔G失。顯式轉(zhuǎn)換包括所有的隱式轉(zhuǎn)換。顯式轉(zhuǎn)換包括下面幾種:1.4 裝箱和拆箱裝箱和拆箱使我們可以把一個(gè)值類型當(dāng)作一個(gè)引用類型看待。裝箱轉(zhuǎn)換是指將一個(gè)值類型隱式的轉(zhuǎn)換成一個(gè)Object類型,拆箱轉(zhuǎn)換是指將一個(gè)Object類型顯式地轉(zhuǎn)換成一個(gè)值類型,他們互為逆過程。裝箱(boxing)裝箱轉(zhuǎn)換是指將一個(gè)值類型隱式轉(zhuǎn)換成一個(gè)object類型,或者把這個(gè)值類型轉(zhuǎn)換成一個(gè)被該值類型應(yīng)用的接口類型。把一個(gè)值類型的值裝箱,也就是創(chuàng)建一個(gè)object實(shí)例并將這個(gè)值給這個(gè)objet.不如: Int i = 10; Objec
11、t obj = i;拆箱(unboxing)拆箱轉(zhuǎn)換是指將一個(gè)對象類型顯式轉(zhuǎn)換成一個(gè)值類型,或是將一個(gè)接口類型顯示地轉(zhuǎn)換成一個(gè)執(zhí)行該接口的值類型。拆箱的過程分為兩步:首先,檢查這個(gè)對象的實(shí)例,看它是否為給定的值類型的裝箱值。然后,把這個(gè)實(shí)例的值拷貝給值類型的變量。如: Int i = 10; Object obj = i; Int j = (int)obj;二 變量、常量2.1、變量在C#中聲明變量使用下述語法:datatype identifier;例如: int i; 一旦它被聲明之后,就可以使用賦值運(yùn)算符(=)給它分配一個(gè)值: i = 10;還可以在一行代碼中聲明變量,并初始化它的值:
12、int i = 10; 如果在一個(gè)語句中聲明和初始化了多個(gè)變量,那么所有的變量都具有相同的數(shù)據(jù)類型: int x = 10, y =20;要聲明類型不同的變量,需要使用單獨(dú)的語句。在多個(gè)變量的聲明中,不能指定不同的數(shù)據(jù)類型: int x = 10;bool y = true; int x = 10, bool y = true; / 這樣編譯報(bào)錯(cuò)1.變量的初始化變量的初始化是C#強(qiáng)調(diào)安全性的另一個(gè)例子。簡單地說,C#編譯器需要用某個(gè)初始值對變量進(jìn)行初始化,之后才能在操作中引用該變量。大多數(shù)現(xiàn)代編譯器把沒有初始化標(biāo)記為警告,但C#編譯器把它當(dāng)作錯(cuò)誤來看待。這就可以防止我們無意中從其他程序遺留下來
13、的內(nèi)存中獲取垃圾值。C#有兩個(gè)方法可確保變量在使用前進(jìn)行了初始化: 變量是類或結(jié)構(gòu)中的字段,如果沒有顯式進(jìn)行初始化,在默認(rèn)狀態(tài)下當(dāng)創(chuàng)建這些變量時(shí),其值就是0。 方法的局部變量必須在代碼中顯式初始化,之后才能在語句中使用它們的值。此時(shí),初始化不是在聲明該變量時(shí)進(jìn)行的,但編譯器會(huì)通過方法檢查所有可能的路徑,如果檢測到局部變量在初始化之前就使用了它的值,就會(huì)產(chǎn)生錯(cuò)誤。同樣的規(guī)則也適用于引用類型??紤]下面的語句: Something objSomething;在C#中,這行代碼僅會(huì)為Something對象創(chuàng)建一個(gè)引用,但這個(gè)引用還沒有指向任何對象。對該變量調(diào)用方法或?qū)傩詴?huì)導(dǎo)致錯(cuò)誤。在C#中實(shí)例化一個(gè)引
14、用對象需要使用new關(guān)鍵字。如上所述,創(chuàng)建一個(gè)引用,使用new關(guān)鍵字把該引用指向存儲在堆上的一個(gè)對象: objSomething = new Something(); / This creates a Something on the heap2.變量的作用域變量的作用域是可以訪問該變量的代碼區(qū)域。一般情況下,確定作用域有以下規(guī)則: 只要字段所屬的類在某個(gè)作用域內(nèi),其字段(也稱為成員變量)也在該作用域內(nèi)局部變量存在于表示聲明該變量的塊語句或方法結(jié)束的封閉花括號之前的作用域內(nèi)。 在for、while或類似語句中聲明的局部變量存在于該循環(huán)體內(nèi)。 局部變量的作用域沖突大型程序在不同部分為不同的變量使
15、用相同的變量名是很常見的。只要變量的作用域是程序的不同部分,就不會(huì)有問題,也不會(huì)產(chǎn)生模糊性。但要注意,同名的局部變量不能在同一作用域內(nèi)聲明兩次,所以不能使用下面的代碼: int x = 20;/ 其它代碼int x = 30;字段和局部變量的作用域沖突在某些環(huán)境下,可以區(qū)分名稱相同(盡管不是經(jīng)過完全限定的名稱)、作用域相同的兩個(gè)標(biāo)識符。此時(shí)編譯器允許聲明第二個(gè)變量。原因是C#使得變量之間有一個(gè)基本的區(qū)分,它把聲明為類型級的變量看作是字段,而把在方法中聲明的變量看作局部變量。2.2、常量在聲明和初始化變量時(shí),在變量的前面加上關(guān)鍵字const,就可以把該變量指定為一個(gè)常量。顧名思義,常量是其值在使
16、用過程中不會(huì)發(fā)生變化的變量: const int a = 100; /變量的值不能改變C#中只能把局部變量和字段聲明為常量。常量具有如下特征: 常量必須在聲明時(shí)初始化。指定了其值后,就不能再修改了。 常量的值必須能在編譯時(shí)用于計(jì)算。因此,不能用從一個(gè)變量中提取的值來初始化常量。如果需要這么做,應(yīng)使用只讀字段。 常量用易于理解的清楚的名稱替代了“含義不明確的數(shù)字或字符串”,使程序更易于閱讀。 常量使程序更易于修改。例如,在C#程序中有一個(gè)SalesTax常量,該常量的值為6%。如果以后銷售稅率發(fā)生變化,可以把新值賦給這個(gè)常量,就可以修改所有的稅款計(jì)算,而不必查找整個(gè)程序,修改稅率為0.06的每個(gè)
17、項(xiàng)。 常量更容易避免程序出現(xiàn)錯(cuò)誤。如果要把另一個(gè)值賦給程序中的一個(gè)常量,而該常量已經(jīng)有了一個(gè)值,編譯器就會(huì)報(bào)告錯(cuò)誤。三 運(yùn)算符和表達(dá)式3.1、運(yùn)算符、表達(dá)式算術(shù)操作符和算術(shù)表達(dá)式 加法操作符 減法操作符 * 乘法操作符 / 除法操作符 求余法操作符例:加法表達(dá)式 Enum WeekdaySunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday;Weekday day1 = weekday.Sunday;Weekday day2 = day1+2;Console.WriteLine(day2);結(jié)果是: Tuesday 賦值運(yùn)算符 * /
18、& << >> 是最簡單的賦值運(yùn)算符,其它的是復(fù)合賦值 ,X 5 等價(jià)于X X5; 關(guān)系運(yùn)算符 等于 !不等于 < 小于 > 大于 <= 小于等于 >= 大于等于 Is運(yùn)算符 Is元算符被用于動(dòng)態(tài)的檢查運(yùn)行時(shí)對象類型是否和給定的類型兼容。運(yùn)算“ e is T”的結(jié)果,其中,e 是一個(gè)表達(dá)式,T是一個(gè)類型,返回值是一個(gè)布爾值。它表示,e是否能通過引用轉(zhuǎn)換,裝箱轉(zhuǎn)換,成功的轉(zhuǎn)換于 T類型。 如:1 is int 結(jié)果是: true As 操作符 As 操作符通過引用轉(zhuǎn)換或裝箱轉(zhuǎn)換將一個(gè)值顯式地轉(zhuǎn)換成指定的引用類型。不像顯式類型轉(zhuǎn)換,as 不會(huì)
19、產(chǎn)生任何異常。如果轉(zhuǎn)換不可以進(jìn)行,那么結(jié)果值為null 。形如“e as T”的運(yùn)算,e 是一個(gè)表達(dá)式,T是一個(gè)引用類型。返回值的類型總是T的類型,并且結(jié)果總是一個(gè)值。如: ? as string;雖然,字符型不能轉(zhuǎn)換為字符串類型,程序可以通過,不過有一個(gè)警告。 位運(yùn)算 & 與| 或 異或 取補(bǔ)<< 左移>> 右移3.2、特殊運(yùn)算符 三元操作符 ?: 條件表達(dá)式 b ? x : y ,先計(jì)算條件b ,然后進(jìn)行判斷。 如果 b 的值為true,計(jì)算 x 的值,運(yùn)算結(jié)果為 x 的值;否則,計(jì)算y,運(yùn)算結(jié)果為 y 值。一個(gè)表達(dá)式,從不會(huì)即計(jì)算 x 值,又計(jì)算y 值。條
20、件表達(dá)式是向右關(guān)聯(lián),例如: a ? b : c ? d: e 將按 a ? b: (c ? d : e)的形式執(zhí)行。 自增和自減操作符 就是對變量自身加一或者減一,注意,自增和自減運(yùn)算符必須是對一個(gè)變量, 一個(gè)屬性訪問器,一個(gè)索引訪問器,而不能是常量或其表達(dá)式, 如:5,(x+y)+ 都是非法的。 自增和自減操作符有前綴和后綴之分,前綴遵循“先增減,后使用”,后綴遵循“先使用后增減”。 New 操作符 一般用于創(chuàng)建一個(gè)新的類型實(shí)例, 如: class A A a = new A();改運(yùn)算符還有其它更多的用法,具體如下:在 C# 中,new 關(guān)鍵字可用作運(yùn)算符、修飾符或約束。1)new 運(yùn)算符
21、:用于創(chuàng)建對象和調(diào)用構(gòu)造函數(shù)。這種大家都比較熟悉,沒什么好說的了。2)new 修飾符:在用作修飾符時(shí),new 關(guān)鍵字可以顯式隱藏從基類繼承的成員。3)new 約束:用于在泛型聲明中約束可能用作類型參數(shù)的參數(shù)的類型。 關(guān)于第二種用法看下例:using System;namespace ConsoleApplication1 public class BaseA public int x = 1;
22、; public void Invoke() Console.WriteLine(x.ToString(); public int TrueValue &
23、#160; get return x; set x = value; public class Derived
24、B : BaseA new public int x = 2; new public void Invoke() Console.WriteLine(x.ToString();
25、 new public int TrueValue get return x;
26、 set x = value; class Test static void Main(string args)
27、; DerivedB b = new DerivedB(); b.Invoke();/調(diào)用DerivedB的Invoke方法,輸出:2 Console.WriteLine(b.x.ToString();/輸出DerivedB的成員x值:2 &
28、#160; BaseA a = b; a.Invoke();/調(diào)用BaseA的Invoke方法,輸出:1 a.TrueValue = 3;/調(diào)用BaseA的屬性TrueValue,修改BaseA的成員x的值
29、; Console.WriteLine(a.x.ToString();/輸出BaseA的成員x的值:3 Console.WriteLine(b.TrueValue.ToString();/輸出DerivedB的成員x的值,仍然是:1/可見,要想訪問被隱藏的基類的成員變量、屬性或方法,辦法就是將子類造型為父類,然/后通過基類訪問被隱藏的成員變量、屬性或方法。 &
30、#160; new約束指定泛型類聲明中的任何類型參數(shù)都必須具有公共的無參數(shù)構(gòu)造函數(shù).請看下例:using System;using System.Collections.Generic; namespace ConsoleApplication2 public class Employee private string name; &
31、#160; private int id; public Employee() name = "Temp"
32、160; id = 0; public Employee(string s, int i) name = s;
33、60; id = i; public string Name get return name;
34、0; set name = value; public int ID get return id; &
35、#160; set id = value; class ItemFactory<T> where T : new() public T GetNewItem()
36、 return new T(); public class Test public static void Main()
37、160; ItemFactory<Employee> EmployeeFactory = new ItemFactory<Employee>(); /此處編譯器會(huì)檢查Employee是否具有公有的無參構(gòu)造函數(shù)。
38、160; /若沒有則會(huì)有The Employee must have a public parameterless constructor 錯(cuò)誤。 Console.WriteLine("0'ID is 1.", EmployeeFactory.GetNewItem().Name, EmployeeFactory.GetNewItem().ID
39、); Typeof 操作符 用于獲得系統(tǒng)原形對象的類型。 如: typeof(int) 等于 int32. Checked 和 unchecked 操作符 Checked 和 unchecked 操作符用于整形算術(shù)運(yùn)算時(shí)控制當(dāng)前環(huán)境中的溢出檢查。 Const int x = ; Const int y = ; Return checked(x * y) /編譯時(shí)會(huì)報(bào)溢出錯(cuò)誤 3.3、優(yōu)先級別 當(dāng)一個(gè)表達(dá)式包含多個(gè)操作符時(shí),操作符的優(yōu)先級控制著單個(gè)操作符的求值順序。四 流程控
40、制4.1、條件語句 條件語句可以根據(jù)條件是否滿足或根據(jù)表達(dá)式的值控制代碼的執(zhí)行分支。C#有兩個(gè)分支代碼的結(jié)構(gòu):if語句,測試特定條件是否滿足;switch語句,它比較表達(dá)式和許多不同的值。1. if語句語法都是非常直觀的:if (condition) statement(s)else statement(s)還可以單獨(dú)使用if語句,不加else語句。也可以合并else if子句,測試多個(gè)條件。2. switch語句switch.case語句適合于從一組互斥的分支中選擇一個(gè)執(zhí)行分支。其形式是switch參數(shù)的后面跟一組case子句。如果switch參數(shù)中表達(dá)式的值等于某個(gè)case子句旁邊的某個(gè)值
41、,就執(zhí)行該case子句中的代碼。此時(shí)不需要使用花括號把語句組合到塊中;只需使用break語句標(biāo)記每個(gè)case代碼的結(jié)尾即可。也可以在switch語句中包含一個(gè)default子句,如果表達(dá)式不等于其他case子句的值,就執(zhí)行default子句的代碼。下面的switch語句測試integerA變量的值: switch (integerA) case 1: Console.WriteLine("integerA =1"); break; case 2: Console.WriteLine("integerA =2"); break; case 3: Conso
42、le.WriteLine("integerA =3"); break; default: Console.WriteLine("integerA is not 1,2, or 3"); break;注意case的值必須是常量表達(dá)式不允許使用變量。4.2、循環(huán)語句C#提供了4種不同的循環(huán)機(jī)制(for、while、do.while和foreach),在滿足某個(gè)條件之前,可以重復(fù)執(zhí)行代碼塊。1. for循環(huán)C#的for循環(huán)提供的迭代循環(huán)機(jī)制是在執(zhí)行下一次迭代前,測試是否滿足某個(gè)條件,其語法如下:for (initializer; condition; iter
43、ator) statement(s)其中: initializer是指在執(zhí)行第一次迭代前要計(jì)算的表達(dá)式(通常初始化為一個(gè)局部變量,作為循環(huán)計(jì)數(shù)器); condition是在每次迭代循環(huán)前要測試的表達(dá)式(它必須等于true,才能執(zhí)行下一次迭代); iterator是每次迭代完要計(jì)算的表達(dá)式(通常是遞增循環(huán)計(jì)數(shù)器)。當(dāng)condition等于false時(shí),迭代停止。for循環(huán)是所謂的預(yù)測試循環(huán),因?yàn)檠h(huán)條件是在執(zhí)行循環(huán)語句前計(jì)算的,如果循環(huán)條件為假,循環(huán)語句就根本不會(huì)執(zhí)行。for循環(huán)非常適合用于一個(gè)語句或語句塊重復(fù)執(zhí)行預(yù)定的次數(shù)。下面的例子就是使用for循環(huán)的典型用法,這段代碼輸出從099的整數(shù):
44、for (int i = 0; i < 100; i = i+1) Console.WriteLine(i); 2. while循環(huán)while循環(huán)與for循環(huán)一樣,while也是一個(gè)預(yù)測試的循環(huán)。其語法是類似的,但while循環(huán)只有一個(gè)表達(dá)式:while(condition) statement(s);與for循環(huán)不同的是,while循環(huán)最常用于下述情況:在循環(huán)開始前,不知道重復(fù)執(zhí)行一個(gè)語句或語句塊的次數(shù)。通常,在某次迭代中,while循環(huán)體中的語句把布爾標(biāo)記設(shè)置為false,結(jié)束循環(huán),如下面的例子所示。 int i = 10,sum = 0;while (i > 0) i -;
45、sum += i;3. dowhile循環(huán)do.while循環(huán)是while循環(huán)的后測試版本。do.while循環(huán)適合于至少執(zhí)行一次循環(huán)體的情況: int i = 10, sum = 0; do i-; sum += i; while (i > 0);4. for each循環(huán)foreach循環(huán)是我們討論的最后一種C#循環(huán)機(jī)制。也是非常受歡迎的一種循環(huán)。從下面的代碼中可以了解foreach循環(huán)的語法,其中假定arrayOfInts是一個(gè)整型數(shù)組: int numbers = 4, 5, 6, 1, 2, 3, -2, -1, 0 ; foreach (int i in numbers) S
46、ystem.Console.WriteLine(i); 其中,foreach循環(huán)一次迭代數(shù)組中的一個(gè)元素。對于每個(gè)元素,它把該元素的值放在int型的變量temp中,然后再執(zhí)行一次循環(huán)迭代。如果需要迭代集合中的各項(xiàng),并改變它們的值,就應(yīng)使用for循環(huán)。4.3、跳轉(zhuǎn)語句C#提供了許多可以立即跳轉(zhuǎn)到程序中另一行代碼的語句,在此,先介紹goto語句。1. goto語句goto語句可以直接跳轉(zhuǎn)到程序中用標(biāo)簽指定的另一行(標(biāo)簽是一個(gè)標(biāo)識符,后跟一個(gè)冒號): goto Label1; Console.WriteLine("This won't be executed");Labe
47、l1: Console.WriteLine("Continuing execution from here");goto語句有兩個(gè)限制。不能跳轉(zhuǎn)到像for循環(huán)這樣的代碼塊中,也不能跳出類的范圍,不能退出try.catch塊后面的finally塊。goto語句的名聲不太好,在大多數(shù)情況下不允許使用它。一般情況下,使用它肯定不是面向?qū)ο缶幊痰暮梅绞健?前面簡要提到過break語句在switch語句中使用它退出某個(gè)case語句。實(shí)際上,break也可以用于退出for、foreach、while或do.while循環(huán),循環(huán)結(jié)束后,立即執(zhí)行后面的語句。如果該語句放在嵌套的循環(huán)中,就執(zhí)
48、行最內(nèi)部循環(huán)后面的語句。如果break放在switch語句或循環(huán)外部,就會(huì)產(chǎn)生編譯時(shí)錯(cuò)誤。2. continue語句continue語句類似于break,也必須用于for、foreach、while或 do.while循環(huán)中。但它只從循環(huán)的當(dāng)前迭代中退出,然后從循環(huán)的下一次迭代開始重新執(zhí)行,而不是退出循環(huán)。3. return語句return語句用于退出類的方法,把控制返回方法的調(diào)用者,如果方法有返回類型,return語句必須返回這個(gè)類型的值,如果方法沒有返回類型,應(yīng)使用沒有表達(dá)式的return語句。4.4、異常處理Try catch(s)Try finallyTry catch(s) fina
49、lly五 程序結(jié)構(gòu)5.1、類C中的類是對數(shù)據(jù)結(jié)構(gòu)的封裝,是C最重要的組成部分。我們利用類定義各種新的數(shù)據(jù)類型,其中既包含數(shù)據(jù)內(nèi)容,有包含數(shù)據(jù)操作,封裝之后,類可以控制外界對它成員的訪問。類的靜態(tài)成員屬于類,非靜態(tài)成員屬于這個(gè)類的某個(gè)實(shí)例。在一個(gè)類的實(shí)例對象的生命周期中,最先執(zhí)行的代碼是類的構(gòu)造函數(shù),構(gòu)造函數(shù)總是用來初始化對象的特殊類型的函數(shù)。不帶參數(shù)的類的構(gòu)造函數(shù)對類的實(shí)例的初始化始固定的,我們也可以使用帶參數(shù)的構(gòu)造函數(shù),通過向他傳遞參數(shù)來對類的不同實(shí)例進(jìn)行不同的初始化。構(gòu)造函數(shù)同樣也可以使用默認(rèn)參數(shù)。當(dāng)這個(gè)類的實(shí)例超出了作用域的時(shí)候,或者由于其它理由被破壞時(shí),析構(gòu)函數(shù)將釋放分配給該實(shí)例的任何
50、存儲區(qū)。5.2、命名空間 命名空間提供了一種組織相關(guān)類和其它類型的方式。與文件或組件不同,命名空間時(shí)一種邏輯組合,而不是物理組合,在C文件中定義類時(shí),可以把它包含在命名空間的定義中,以后在定義另一個(gè)類,在另一個(gè)文件中執(zhí)行相關(guān)操作時(shí),就可以在同一個(gè)命名空間中包含它,創(chuàng)建一個(gè)邏輯組合,告訴其它使用類的開發(fā)人員如何使類相關(guān),和對他們進(jìn)行使用。 命名空間可以嵌套。如:Namespace ANamespace B Namespace C 代碼塊 每個(gè)命名空間名都由他所在的命名空間的名稱組成,這些名稱用句號隔開,首先是最外層,最后是自己的名字。如:上面的例子也可以寫成:Namespace A. B. C
51、代碼塊不允許在另一個(gè)嵌套的命名空間中聲明多部分的命名空間。也不能在同一命名空間中有兩個(gè)同名的類。5.3、Main方法C#程序是從方法Main()開始執(zhí)行的。這個(gè)方法必須是類或結(jié)構(gòu)的靜態(tài)方法,并且其返回類型必須是int或void。雖然顯式指定public修飾符是很常見的,因?yàn)榘凑斩x,必須在程序外部調(diào)用該方法,但我們給該方法指定什么訪問級別并不重要,即使把該方法標(biāo)記為private,它也可以運(yùn)行。在調(diào)用程序時(shí),可以讓CLR包含一個(gè)參數(shù),將命令行參數(shù)轉(zhuǎn)送給程序。這個(gè)參數(shù)是一個(gè)字符串?dāng)?shù)組,傳統(tǒng)稱為args(但C#可以接受任何名稱)。在啟動(dòng)程序時(shí),可以使用這個(gè)數(shù)組,訪問通過命令行傳送過來的選項(xiàng)。下面的
52、例子ArgsExample.cs是在傳送給Main方法的字符串?dāng)?shù)組中迭代,并把每個(gè)選項(xiàng)的值寫入控制臺窗口:using System;using System.Collections.Generic;using System.Text;namespace ConsoleApplication2 class Program static void Main(string args) for (int i = 0; i < args.Length; i+) Console.WriteLine(argsi); 通常使用命令行就可以編譯這段代碼。在運(yùn)行編譯好的可執(zhí)行文件時(shí),可以在程序名的后面加上參
53、數(shù),例如:在dos命令行中輸入 :存儲目錄/ConsoleApplication2/a /b /c 輸出:/a/b/c六 程序例子6.1、類的定義,繼承,使用,類方法的重寫using System;using System.Collections.Generic;using System.Text;namespace ConsoleApplication1 class Vehicle public int wheels; public float weight; public void F() wheels = 4; weight = 10; class Car : Vehicle int passengers; public void F() weight = 8; wheels = 8; Vehicle v = new Vehicle(); v.wheels = 4; v.weight = 6; passengers = 10; Console.WriteLine("01234", v.wheels,v.weight,wheels,weight,passengers); public override string ToString() string Result = "繼承來的weight:" +
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 發(fā)電用蒸汽機(jī)鍋爐非陸地車輛用產(chǎn)品供應(yīng)鏈分析
- 投標(biāo)報(bào)價(jià)行業(yè)相關(guān)項(xiàng)目經(jīng)營管理報(bào)告
- 河南省豫西北教研聯(lián)盟(許洛平)2024-2025學(xué)年高三上學(xué)期一模英語試題 含解析
- 舞臺燈光調(diào)節(jié)器市場發(fā)展前景分析及供需格局研究預(yù)測報(bào)告
- 區(qū)塊鏈社交網(wǎng)絡(luò)行業(yè)相關(guān)項(xiàng)目經(jīng)營管理報(bào)告
- 醫(yī)學(xué)研究行業(yè)營銷策略方案
- 網(wǎng)絡(luò)攝像機(jī)市場發(fā)展前景分析及供需格局研究預(yù)測報(bào)告
- 藥用蛋白胨市場發(fā)展前景分析及供需格局研究預(yù)測報(bào)告
- 動(dòng)作識別傳感器產(chǎn)業(yè)鏈招商引資的調(diào)研報(bào)告
- 在線數(shù)據(jù)存儲服務(wù)行業(yè)營銷策略方案
- 廣東省信宜市2023-2024學(xué)年高二上學(xué)期期中考試歷史試題
- 《田螺姑娘》兒童故事ppt課件(圖文演講)
- 更改民族申請表 2
- 錢穆:中國思想通俗講話
- 金融業(yè)的數(shù)據(jù)隱私保護(hù)與合規(guī)問題分析
- 巧借數(shù)學(xué)課堂實(shí)施情智教學(xué)
- 銷售應(yīng)急預(yù)案
- 設(shè)備到貨現(xiàn)場驗(yàn)收單
- 2023年新聞?dòng)浾哔Y格證及新聞寫作相關(guān)知識考試題庫(附含答案共400題)
- 部編版七年級上《論語十二章》理解性默寫訓(xùn)練及答案
- GB/T 2404-2023氯苯
評論
0/150
提交評論