1. using 代替了 try…catch…finally 因為之前是學 Java 的,在連接資料庫或者進行文件讀寫操作時很自然的就使用了 try…catch…finally…,在 C# 中這樣寫也肯定可以但是還有一種更優雅的寫法(我看到別人這樣說),那就是使用 using 關鍵字。 在使用各種流... ...
1. using 代替了 try…catch…finally
因為之前是學 Java 的,在連接資料庫或者進行文件讀寫操作時很自然的就使用了 try…catch…finally…,在 C# 中這樣寫也肯定可以但是還有一種更優雅的寫法(我看到別人這樣說),那就是使用 using 關鍵字。
在使用各種流或者連接時【文件讀寫流,資料庫連接等等】,在使用完畢後,需要關閉流和連接,(這裡不討論資料庫連接需要歸還到池子)
之前的代碼是這樣的:
public void Test1() { SqlConnection conn = null; SqlDataReader reader = null; try { string strConn = ConfigurationManager.ConnectionStrings["strConn"].ToString(); conn = new SqlConnection(strConn); conn.Open(); SqlCommand cmd = conn.CreateCommand(); cmd.CommandText = "XXXXXXXXX"; reader = cmd.ExecuteReader(); //一些操作 } catch (Exception e) { Console.WriteLine("出錯啦!!"); } finally { if (conn != null) { conn.Close(); conn.Dispose(); } if (reader != null) { reader.Dispose(); } } }
使用了 using 關鍵字之後是這樣的:
public void Test2() { string strConn = ConfigurationManager.ConnectionStrings["strConn"].ToString(); using (SqlConnection conn = new SqlConnection(strConn)) { using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = "XXXXXXXXXX"; using (SqlDataReader reader = cmd.ExecuteReader()) { //一些操作 } } } }關於 using 關鍵字,有必要弄清楚“托管資源”和“非托管資源”,只有非托管資源才需要使用 using 關鍵字。
關於非托管資源和托管資源可以看這篇博客【 】
2. 欄位的省略
還記得在 Java 中寫欄位的讀寫方法時,快捷鍵用的相當的 6 ,那麼 C# 中沒有與其類似的對象呢,快捷鍵當然有,不過還有更猛的,就是不用寫欄位了,只管寫讀寫屬性就好,編譯器會自動根據讀寫屬性去生成欄位。
public class Person { public string Name { get; set; } public int Age { get; set; } public string Sex { get; set; } }編譯器在編譯時就會自動生成欄位,下麵是編譯過後的 IL代碼目錄,可以看到最下麵生成了三個欄位。
3. 兩個問號“??”的作用
一個問號見過,在三目元算符裡面就是。兩個問號呢?
之前見到這樣的寫法也是比較奇葩的。看代碼吧:
public class Program { public static void Main(string[] args) { string a = null; var b = a ?? "woaini"; Console.WriteLine("b : " + b); Console.WriteLine("============="); a = "msym"; var c = a ?? "woaini"; Console.WriteLine("c: " + c); } }運行看結果:
結論就是:問號左邊的是 null 得話,那麼得到就是問號右邊的值,反之就是問號左邊的值。
4. 擴展方法
這個可以看這個博客【C# 中的擴展方法】
還有這個博客,擴展方法的運用【擴展方法的運用】
其實我對擴展方法的理解,就是一個特殊的工具類,只不過和類型綁定在一起了。這隻是我暫時的理解,因為還沒涉及到底層。
【未完待續】
【回到主頁】