c# using語句用於定義乙個範圍,在此範圍的末尾將釋放物件,這樣的用法比較少見,常見於非託管資源。這些資源在使用後,就必須徹底釋放。
1、作為指令,用於為命名空間建立別名或匯入其他命名空間中定義的型別。請參見[using 指令]。
2、作為c# using語句,用於定義乙個範圍,在此範圍的末尾將釋放物件。請參見[using 語句]。
其中,第1點就是我們所熟悉using的使用方法,而第二種c# using語句方法我們就比較少用了,它常見於非託管資源(也就是在c++程式設計裡面可能碰到的控制代碼和裝置上下文),這些資源使用完畢後,是必須釋放的。在c#裡面,由於完全的物件導向程式設計,這些資源型別都實現了idisposable介面,因此會使用在捕獲異常try...catch語句的finally塊中釋放資源,**如下:
finally這樣確保呼叫dispose,從而保證釋放資源。(請注意,使用額外的大括號為物件建立有效的範圍而此時如果使用using語句,同樣能夠獲得相同的結果,**如下:}
using(font font3 =newfont("arial"using語句按照正確的方式呼叫物件上的dispose方法,並(在您按照前面所示方式使用它時)會導致在呼叫 dispose 時物件自身處於範圍之外。在using塊中,物件是唯讀的並且無法進行修改或重新分配。, 10.0f), font4 =newfont("arial"
, 10.0f))
同時還要注意的一點是:
按照規則,當使用idisposable物件時,應在using語句中宣告和例項化此物件。雖然可以在using語句外例項化資源物件,**如下:
font font2在這種情況下,該物件將在控制權離開 using 塊之後保持在範圍內,即使它可能將不再具有對其非託管資源的訪問權也是如此。換句話說,再也不能完全初始化該物件。如果試圖在 using 塊外部使用該物件,則可能導致引發異常,如上述**段3中的font2.getheight()呼叫而產生異常。由於這個原因,通常最好是在 using 語句中例項化該物件並將其範圍限制在 using 塊中。= new
font("arial", 10.0f);
using (font2) // not recommended
// font2 is still in scope
// but the method call throws an exception
float f
= font2
.getheight();
在這一點上,如果再使用ildasm工具一查,就會看到**段1和**段2生成的**幾乎是完全一樣的,而這樣使用使用using語句的方式更加簡潔、方便。
using 語句被翻譯成三個部分:獲取、使用和處置。資源的使用隱式封閉在包含乙個 finally 子句的 try語句中。此 finally 子句處置資源。如果獲取了 null 資源,則不進行對 dispose 的呼叫,也不引發任何常。
例如,下列形式的 using 語句
下面的示例顯示使用者定義類可以如何實現它自己的 dispose 行為。注意型別必須從 idisposable 繼承。
執行結果如下:
element ui使用心得總結
1 樹形列表el table的資料data中有haschildren屬性時,必須結合lazy,load,才能有點選展開的效果,缺其中乙個要素沒有配置,都不能點選展開 2 樹形列表el table的資料data中有haschildren屬性時,default expand all必須有lazy才能生效...
SQL語句replace into 使用心得
最近專案中使用對資料庫表操作時,經常有以下需求 1 首先判斷資料是否存在 2 如果不存在,則插入 3 如果存在,則更新。搜尋許久,發現了replace into,replace into真的很好用,是insert into的增強版。在sql server中可以這樣處理 if not exists s...
C using 使用總結
1.在當前檔案中引入命名空間 這是我們最熟悉的用法,例如 using namespace std 2.在子類中使用 using 宣告引入基類成員名稱 參見c primer 在private或者protected繼承時,基類成員的訪問級別在派生類中更受限 class base protected st...