一、@符號的妙用
1、可以作為保留關鍵字的標識符
C#規范當中,不允許使用保留關鍵字(class、bool等)當作普通的標識符來命名,這時候@符號作用就體現
出來了,可以通過@符號前綴把這些保留關鍵字可以當作普通的字符使用。
比如:
string @class="hello"; //是正確的 string class="hello"; //報錯
2、@符號可以表示跨行字符串
比如:
string str=@"hello world !"; //這樣寫是正確的
3、字符串轉義字符
很多時候程序中出現目錄的時候會有“\”,字符表示轉義字符,要表示普通字符的時候需要寫成“\\”,當這樣字符過多的時候寫起來不是很簡潔,這時候可以使用@字符。
比如:
string path="d:\\Data\\web\\ss.txt";//一般寫法 string path=@"d:\Data\web\ss.txt";//使用@符號
二、using的用法
1、using 指令
用來引入命名空間,比如:using System;
2、為命名空間或類型創建別名
using引入命名空間,並不等於編譯器編譯時加載該命名空間所在的程序集,程序集的加載決定於程序中對該程序集是否存在調用操作,
如果代碼中不存在任何調用操作則編譯器將不會加載using引入命名空間所在程序集。
創建別名的另一個重要的原因在於同一文件中引入的不同命名空間中包括了相同名稱的類型,
例如SharpMap.Geometries.Point與System.Drawing.Point。為了避免出現名稱沖突,可以通過設定別名來解決:
using SGPoint = SharpMap.Geometries.Point; using SDPoint = System.Drawing.Point;
盡管我們可以通過類型全名稱來加以區分,但是這顯然不是最佳的解決方案。用using指令創建別名,
有效的解決了這種可能的命名沖突,才是最佳的解決方案。
3、using語句
using 語句允許程序員指定使用資源的對象應當何時釋放資源。using 語句中使用的對象必須實現 IDisposable 接口。
IDisposable接口提供了 Dispose 方法,該方法將釋放此對象的資源。
例如:
using(TextReader reader=new StreamReader(filename)) { string line; whil((line=read.ReadLine())!=null) { Console.WriteLine(line); } }
等價於以下形式:
{ TextReader reader=new StreamReader(filename); try { string line; while((line=read.ReadLine())!=null) { Console.WriteLine(line); } } finally { if(reader!=null) { (IDisposible)reader.Dispose(); } } }
4、使用規則
1、using只能用於實現了IDisposable接口的類型,禁止為不支持IDisposable接口的類型使用using語句,否則會出現編譯錯誤;
2、using語句適用於清理單個非托管資源的情況,而多個非托管對象的清理最好以try-finnaly來實現,
因為嵌套的using語句可能存在隱藏的Bug。內層using塊引發異常時,將不能釋放外層using塊的對象資源;
3、using語句支持初始化多個變量,但前提是這些變量的類型必須相同,例如:
using(Pen p1 = new Pen(Brushes.Black), p2 = new Pen(Brushes.Blue)) { //todo }
4、針對初始化對個不同類型的變量時,可以都聲明為IDisposable類型,例如:
using (IDisposable font = new Font("Verdana", 12), pen = new Pen(Brushes.Black)) { float size = (font as Font).Size; Brush brush = (pen as Pen).Brush; }
公眾號:原文