生活随笔
收集整理的這篇文章主要介紹了
using语句之-释放资源和异常处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
有時,代碼要求非托管資源,如文件句柄、COM 包裝或 SQL 連接。在使用一個或多個此類資源完成了代碼后,Using ?塊確保這些資源的釋放。這樣,其他代碼就可以使用它們。 托管資源由 .NET Framework 垃圾回收器 (GC) 釋放,您不需要進行任何額外的編碼。您也不需要用于托管資源的?Using ?塊。Using ?塊有三個部分:獲取、使用和釋放。獲取表示創建變量并將其初始化,以便引用系統資源。Using ?語句可獲取一個或多個資源,您可以在進入塊之前恰好獲取一個資源,并將其提供給?Using ?語句。如果提供 resourceexpression,在將控制權傳遞給?Using ?語句之前,您必須獲取資源。 使用表示訪問資源并使用資源執行操作。Using ?和?End Using ?之間的語句代表資源的使用過程。 釋放表示針對 resourcename 中的對象調用?Dispose ?方法。這使該對象可以完全終止其非托管資源。End Using ?語句釋放?Using ?塊控制的資源。 行為Using ?塊的工作方式類似于?Try ...Finally ?構造,在該構造中,Try ?塊使用資源,而?Finally ?塊釋放資源。因此,不管您如何退出塊,Using 塊都可確保資源的釋放。即使發生未處理的異常(除?StackOverflowException?外),也是如此。Using ?語句獲取的每個資源變量的范圍僅限于?Using ?塊。 如果在?Using ?語句中指定多個系統資源,效果就好像您將多個?Using ?塊相互嵌套一樣。 Using 塊中的結構化異常處理如果需要處理可能發生在?Using ?塊中的異常,可以向該塊中添加一個完整的?Try ...Finally ?構造。如果需要處理Using ?語句未成功獲取資源的情況,可以進行測試,以確定 resourcename 是否為?Nothing 。 進行結構化異常處理而不使用 Using 塊如果需要對資源的獲取進行更細致的控制,或者需要?Finally ?塊中的附加代碼,可以將?Using ?塊重寫為Try ...Finally ?構造。下面的示例顯示主干?Try ?和?Using ?構造,這兩個構造在獲取和釋放 resource 過程中是等效的。
?? 在using語句內的資源必須重載IDispose這個接口,上面說的可以看出,using只負責執行所包含資源的一些操作,然后釋放掉,并不是能夠處理(using(){。。。。})大括號里的異常,如果擔心內部發生異常,是要自己寫try和catch的。。。using System; class C : IDisposable { public void UseLimitedResource() { Console.WriteLine("Using limited resource..."); } void IDisposable.Dispose() { Console.WriteLine("Disposing limited resource."); } } class Program { static void Main() { using (C c = new C()) { c.UseLimitedResource(); } Console.WriteLine("Now outside using statement."); Console.ReadLine(); } }
?
轉載于:https://www.cnblogs.com/hanyulcf/archive/2009/08/27/1554960.html
總結
以上是生活随笔 為你收集整理的using语句之-释放资源和异常处理 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。