C#基礎(chǔ)知識點(diǎn)_第1頁
C#基礎(chǔ)知識點(diǎn)_第2頁
C#基礎(chǔ)知識點(diǎn)_第3頁
C#基礎(chǔ)知識點(diǎn)_第4頁
C#基礎(chǔ)知識點(diǎn)_第5頁
已閱讀5頁,還剩16頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 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# 值類型包括:整型、布爾型、實(shí)型、十進(jìn)制型

2、、結(jié)構(gòu)和枚舉、接口和數(shù)組。從概念上看,其區(qū)別是值類型直接存儲其值,而引用類型存儲對值的引用。這兩種類型存儲在內(nèi)存的不同地方:值類型存儲在堆棧中,而引用類型存儲在托管堆上。注意區(qū)分某個(gè)類型是值類型還是引用類型,因?yàn)檫@種存儲位置的不同會有不同的影響。例如,int是值類型,這表示下面的語句會在內(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 = 30; y = x;Co

3、nsole.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è)引用而不會實(shí)例化給定類型的對象。因?yàn)閤和y引用同一個(gè)對象,所以對x的修改會影響y,反之亦然。因此上面的代碼會顯式30和50。 如果變量是一個(gè)引用,就可以把其值設(shè)置為null,確定它不引用任何對象: y = null;在C#中,基本數(shù)據(jù)類型如bool和long都是值類型。如果聲明一個(gè)bool變量,并

4、給它賦予另一個(gè)bool變量的值,在內(nèi)存中就會有兩個(gè)bool值。如果以后修改第一個(gè)bool變量的值,第二個(gè)bool變量的值也不會改變。這些類型是通過值來復(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會定期進(jìn)行清理,刪除不能訪問的對象,把它們占用的內(nèi)存返回給操作系統(tǒng)。這是通過垃圾

5、收集器實(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è)重要特性, object類型就可

6、以用于兩個(gè)目的: 可以使用object引用綁定任何特定子類型的對象。 object類型執(zhí)行許多基本的一般用途的方法,包括Equals()、GetHashCode()、GetType()和ToString()。用戶定義的類可能需要使用一種面向?qū)ο蠹夹g(shù) 重寫,提供其中一些方法的替代執(zhí)行方法。例如,重寫ToString()時(shí),要給類提供一個(gè)方法,該方法可以提供類本身的字符串表示。如果類中沒有提供這些方法的實(shí)現(xiàn),編譯器就會在對象中選擇這些實(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í),會得到對內(nèi)存中同一個(gè)字符串的兩個(gè)引用。但是,string與引用類型在常見的操作上有一些區(qū)別。例如,修改其中一個(gè)字符串,注意這會創(chuàng)建一個(gè)全新的string對象,而另一個(gè)字符串沒有改變??紤]下面的代碼: using System;class

8、 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 now " +

9、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)換一般不會失敗,轉(zhuǎn)換過程中也不會導(dǎo)致信息丟失。隱式轉(zhuǎn)換包括下面幾種:2.顯式轉(zhuǎn)換顯式類型轉(zhuǎn)換,就是強(qiáng)制類型轉(zhuǎn)換。與隱式轉(zhuǎn)換正好相反,顯式轉(zhuǎn)換需要用戶明確指定轉(zhuǎn)換的類型,不如看下面例子: long l = 5000; int I = (int)l;顯式轉(zhuǎn)換可以

10、發(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; Object obj = i;拆箱(

11、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;還可以在一行代碼中聲明變量,并初始化它的值: int i = 10; 如

12、果在一個(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)錯1.變量的初始化變量的初始化是C#強(qiáng)調(diào)安全性的另一個(gè)例子。簡單地說,C#編譯器需要用某個(gè)初始值對變量進(jìn)行初始化,之后才能在操作中引用該變量。大多數(shù)現(xiàn)代編譯器把沒有初始化標(biāo)記為警告,但C#編譯器把它當(dāng)作錯誤來看待。這就可以防止我們無意中從其他程序遺留下來的內(nèi)存中獲取垃圾值。C#有

13、兩個(gè)方法可確保變量在使用前進(jìn)行了初始化: 變量是類或結(jié)構(gòu)中的字段,如果沒有顯式進(jìn)行初始化,在默認(rèn)狀態(tài)下當(dāng)創(chuàng)建這些變量時(shí),其值就是0。 方法的局部變量必須在代碼中顯式初始化,之后才能在語句中使用它們的值。此時(shí),初始化不是在聲明該變量時(shí)進(jìn)行的,但編譯器會通過方法檢查所有可能的路徑,如果檢測到局部變量在初始化之前就使用了它的值,就會產(chǎn)生錯誤。同樣的規(guī)則也適用于引用類型。考慮下面的語句: Something objSomething;在C#中,這行代碼僅會為Something對象創(chuàng)建一個(gè)引用,但這個(gè)引用還沒有指向任何對象。對該變量調(diào)用方法或?qū)傩詴?dǎo)致錯誤。在C#中實(shí)例化一個(gè)引用對象需要使用new關(guān)鍵字

14、。如上所述,創(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、只要變量的作用域是程序的不同部分,就不會有問題,也不會產(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è)常量。顧名思義,常量是其值在使用過程中不會發(fā)生變化的變量

16、: const int a = 100; /變量的值不能改變C#中只能把局部變量和字段聲明為常量。常量具有如下特征: 常量必須在聲明時(shí)初始化。指定了其值后,就不能再修改了。 常量的值必須能在編譯時(shí)用于計(jì)算。因此,不能用從一個(gè)變量中提取的值來初始化常量。如果需要這么做,應(yīng)使用只讀字段。 常量用易于理解的清楚的名稱替代了“含義不明確的數(shù)字或字符串”,使程序更易于閱讀。 常量使程序更易于修改。例如,在C#程序中有一個(gè)SalesTax常量,該常量的值為6%。如果以后銷售稅率發(fā)生變化,可以把新值賦給這個(gè)常量,就可以修改所有的稅款計(jì)算,而不必查找整個(gè)程序,修改稅率為0.06的每個(gè)項(xiàng)。 常量更容易避免程序出

17、現(xiàn)錯誤。如果要把另一個(gè)值賦給程序中的一個(gè)常量,而該常量已經(jīng)有了一個(gè)值,編譯器就會報(bào)告錯誤。三 運(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元算符被用于動態(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 不會產(chǎn)生任何異常。如果轉(zhuǎn)換不可

19、以進(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á)式,從不會即計(jì)算 x 值,又計(jì)算y 值。條件表達(dá)式是向右關(guān)聯(lián),例如:

20、 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)算符:用于創(chuàng)建對象和調(diào)用構(gòu)造函

21、數(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 DerivedB : BaseA

24、0;           new public int x = 2;        new public void Invoke()                    Console.WriteLine(x.ToString();  &

25、#160;             new public int TrueValue                    get return x;             set x = valu

26、e;                  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"            id

32、 = 0;                 public Employee(string s, int i)                    name = s;        

33、0;   id = i;                 public string Name                    get return name;        

34、;     set name = value;                  public int ID                    get return id;     &#

35、160;       set id = value;                  class ItemFactory<T> where T : new()            public T GetNewItem()     &

36、#160;              return new T();                 public class Test            public static void Main()  

37、60;                 ItemFactory<Employee> EmployeeFactory = new ItemFactory<Employee>();            /此處編譯器會檢查Employee是否具有公有的無參構(gòu)造函數(shù)。    

38、60;       /若沒有則會有The Employee must have a public parameterless constructor 錯誤。            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 = 1000000; Const int y = 1000000; Return checked(x * y) /編譯時(shí)會報(bào)溢出錯誤 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: Cons

42、ole.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; ite

43、rator) 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)語句就根本不會執(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)

46、System.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");Lab

47、el1: 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)中,就

48、執(zhí)行最內(nèi)部循環(huán)后面的語句。如果break放在switch語句或循環(huán)外部,就會產(chǎn)生編譯時(shí)錯誤。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) fin

49、ally五 程序結(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#可以接受任何名稱)。在啟動程序時(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)容里面會有圖紙預(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論