日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# 基础知识 (二).独特的知识及用法篇

發布時間:2024/5/28 C# 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# 基础知识 (二).独特的知识及用法篇 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在C#中有一些我自己認為比較獨特的知識點,這些知識點是我經常使用的知識,但對它們的了解還是比較少的,所以通過查找資料學習,總結了這些獨特的知識點并簡單敘述,希望對大家有所幫組!其中主要有:var關鍵字、try..catch..finally、foreach語句、ArrayList類、#region..#endregion等知識點。

一.var關鍵字

隱含類型,使用var來聲明任意類型的局部變量。在C#中它僅僅是一個關鍵字,不代表一種新的類型,它僅是負責告訴編譯器:該變量需要根據初始化表達式來推斷變量的類型,而且只能是局部變量。Var聲明變量后,變量類型就確定下來了,不會在變。例:

var str = “Hello world”; //string類型,相當于 string str = “Hello world”var request = (HttpWebRequest)WebRequest.Create(url); //這是http網絡編程中我使用的例子,var可用HttpWebRequest類型替換

二.try..catch..finally

用于處理異常,通常有三中異常處理語句:

(1).try…catch;? ???????????? ?//處理異常

(2).try…finally;? ?????????? ? //清除異常

(3).try…catch…finally;? //處理所有異常

try塊中包含容易產生異常的代碼,使用引發異常語句,接著捕獲異常;try塊中發生異常后跳轉到catch異常處理程序,catch用于異常處理程序,通常格式為:catch(異常類 異常對象實例){…}

例1:(參考自《從零開始學C#》)

int [] nums = {1,2,3,4,5,6,7,8,9}; //定義整形數組 try {for(int i=0;i<=num.Length;i++){Console.Write(num[i].ToString()+” ”);} } catch(Exception ex) {Console.Write(ex.Message.ToString()); //輸入異常錯誤 }

Try語句捕獲異常,由于數組索引從0開始遍歷,用“<=”會遍歷10次,多遍歷一次,出現索引越界,跳轉到catch語句先創建一個異常的對象ex并輸出錯誤信息。運行結果如下圖所示:

finally用于清除產生錯誤分配的資源,在使用try..catch..finally語句中即使引發異常,finally塊中的代碼也會被執行(始終執行),從程序中釋放資源。try..catch..finally語句捕獲錯誤、清除并執行應用程序,無論有沒有異常都會執行,出現異常是執行順序為:try->catch->finally;沒有異常執行順序為:try->finally。下面看一個實際工程中使用的例子:

例2:(這是我在C#網絡編程中自己編寫的代碼)

try {Stream=response.GetResponseStream(); //獲取應答流… //具體通訊瀏覽器操作 } catch (Exception msg) {MessageBox.Show(msg.Message); //異常處理 } finally {stream.Close(); //釋放資源:關閉流操作 }

這是C#瀏覽器中出現異常情況(斷開網絡連接訪問)執行結果如下圖所示:

最后注意,處理異常會大大降低性能,所以不要將它用在控制正常程序流程中,如果有可能檢測到代碼中異常,請替代try..catch..finally操作。如在出發中除數不能為0這個異常我們可以用if判斷不為0在進行除法操作,這樣就實現了替換。(自定義異常throw這里我就不在介紹了)

三.foreach循環語句

foreach語句為數組或對象集合中的每一個元素重復一個嵌入語句組,用于循環訪問集合以獲取所需信息,需要調用IEnumerable接口,其格式:foreach(類型變量 in 集合) {?…?//操作}每執行一次,循環變量就依次取集合中的一個元素操作。foreach語句的主要特點是代碼簡潔,效率又高。

例1:(foreach語句簡單迭代)

int [] nums = {1,2,3,4,5,6,7,8,9}; //定義整形數組 foreach(int i in nums) {Console.WriteLine(i); //循環輸出數組 } //相當于:for(int i=0;i<nums.Length;i++) {...}

注意:在如上述一維或多維數組遍歷中,盡量使用foreach語句,他會自動檢查數組的索引,使其不會出現越界錯誤。而在上面數組訪問中for循環語句每執行一次都會對數組索引有效值進行判斷是否越界(相當于使用if-else判斷),foreach會避免這樣情況相對效率較高。同時,如果采用多維數組操作foreach會更加方便,它只需一層循環,而for語句需要多層循環來執行。

例2:(foreach與for語句多維數組對比)

int [,] intArray = new int[4,4] {{5,2},{1,2},{3,4}…} foreach(int i in intArray) {Console.WriteLine(i); } //而采用for語句需要兩層循環執行 for(int i=0;i<intArray.GetLength(0);i++)for(int j=0;j<intArray.GetLength(1);j++)Console.WriteLine(intArray[i,j]);

下面是foreach語句我在實際項目工程中的一個簡單應用,代碼如下:

例3:(foreach語句在實際工程中的簡單應用)

int count = 0; //記錄選中對象個數 public List<object> aryRects; //存放所有Rectangle對象 public abstract class shape:Object {…} //shape類:屬性protected bool BSelected是否被鼠標選中 foreach(shape s in aryRects) {if (s.BSelected) //如果被選中,count+1{count++;} }

這是一個C#編寫畫圖軟件,通過判斷在圖上已經被鼠標左鍵選中的圖形的個數及相應屬性實現移動、刪除等功能。運行結果如下:

顯然,使用for想實現上面的功能是非常困難,甚至無法實現的,這就是foreach的好處及實際工程中的應用。foreach語句需要注意:這里的循環變量是一個只讀型局部變量,如果嘗試改變其值或刪除會發生編輯錯誤。

foreach(int I in nums) {i++; //不能修改值Console.WriteLine(i); } //它提示的錯誤信息為:i是一個foreach迭代變量,無法為它賦值 foreach(int I in nums) {nums.Remove(i); //不能刪除值Console.WriteLine(i); }

這只是我對foreach的一些簡單認識,其中一些知識點及思想還引用了該文章,這是一篇非常優秀的關于foreach語句的文章,感謝原作者和轉載作者:http://blog.csdn.net/huang7914/article/details/2296176

四.ArrayList類

數組通常大小固定后就不能更改,但C#提供了動態數組ArrayList類實現動態添加、插入或移除元素的方法,更加靈活的設置數組大小。在使用該類前必須要聲明System.Collections命名空間,ArrayList的屬性和方法如下:

ArrayList類屬性表

(由于使用CSDN插入表格間距太大,不知道怎樣設置行間距,才換成了圖片格式,見諒!)

ArrayList類常用方法表

(上面的兩個表格都轉自孫景瑞的《從零開始學C#》,非常優秀的一本書籍,推薦大家看看,同時感謝作者,這里引用了他的知識結晶)

例:

ArrayList aryList = new ArrayList(); for(int i=0;i<4;i++) {aryList.Add(i); //使用add方法添加4個元素 } Console.WriteLine("ArrayList動態數組中元素的個數為:"+aryList.Count); //Count屬性string[] Str = {"abc","xyz"}; aryList.AddRange(Str); //AddRange(數組名)將Str數組中所有元素添加到aryList動態數組末尾 Console.WriteLine("ArrayList動態數組中元素的個數為:"+aryList.Count);aryList.RemoveAt(1); //刪除索引為1的元素(0開始索引)即:數字1(第二項) aryList.Remove("abc"); //刪除值第一個為”abc”的值Console.WriteLine("遍歷輸出ArrayList動態數組中所有元素"); foreach(object list in aryList) //遍歷輸出動態數組aryList中所有元素 {Console.WriteLine(list.ToString()); }

輸出結果如下圖所示:

五.#region..#endregion

C#中使用預處理指令可以禁止編譯器編譯代碼的某部分,還可以禁止編譯器與額外功能相關的代碼,預處理指令的開頭都是#符號,如:#define、#undef、#if、#elif、#else、#endif、#warning、#error、#regoin、#endregion、#line、#pragma。這里我主要想講講#region..#endregion的用法。

#region..#endregion指令用于將一段代碼標記給指定名稱的塊,實現指定展開或折疊代碼塊。#region塊必須以#endregion指令終止。格式為:#region 名稱 ... #endregion.如下圖所示:

#region 屬性//狀態處理對應的操作菜單private ContextMenu menuDelSet;private MenuItem menuSet;private MenuItem menuDel;private MenuItem dynamicModel;public LoadData loadData;public List<object> aryRects; //存放所有Rectangle對象private List<object> aryLines; //存放所有Line對象public List<VarBase> varList; //存放所有的變量private List<int> usedModelID; //已使用的模型IDprivate List<int> toUseModelID; //可用的模型ID//Undo or Redo 規定只保存5次private UndoBuffer undoB;private shapeRect gRect = null; //在Form中被選中的唯一,模型;private shapeRect gFrom = null;private shapeRect gTo = null; //畫線時的from 和 toprivate shapeLine gLine = null;private Point firstStart;private Point lastStart; //記錄鼠標起始位置private const int iRectW = 80; //狀態對象矩形的寬度;private const int iRectH = 40; //狀態對象矩形的高度;#endregion

使用它的優點是可以被某些編譯器識別,包括Visual Studio .NET編譯器,這些編譯器可以使用這些指令使代碼在屏幕上更好地布局,能隱藏代碼便于管理和查看,如下圖所示是在工程中隱藏了相應部分功能代碼的例子,給人一目了然的感覺。

希望這些知識點能幫助鞏固和學習C#知識,同時這僅僅是我在學習C#中遇到的自認為比較特殊的知識點,如果敘述中有錯誤或不足之處見諒!不太會排版,見諒!

(By:Eastmount 2013-8-25 夜1點http://blog.csdn.net/eastmount/)

總結

以上是生活随笔為你收集整理的C# 基础知识 (二).独特的知识及用法篇的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。