[英]Using block: object initialization compiled into try block
在我的項目中,我有一個構造函數可以拋出的對象。 所以我正在使用的代碼如下:
MyObject obj = null;
try
{
obj = new MyObject();
obj.DoSomething();
}
finally
{
if (obj != null)
obj.Free();
}
using (MyObject obj = new MyObject())
{
obj.DoSomething();
}
由.NET CLR轉換為
{
MyObject obj = new MyObject();
try
{
obj.DoSomething();
}
finally
{
if (obj != null)
((IDisposable)obj).Dispose();
}
}
問題是:我可以以某種方式使CLR將對象的構造函數放入try塊中嗎?
問題是:我可以以某種方式使CLR將對象的構造函數放入try塊中嗎?
不,或者說,從資源管理的角度來看,這樣做毫無意義。 如果構造函數拋出異常,那么就不會有一個分配給obj
的引用,所以沒有什么可以調用Dispose
。
至關重要的是,如果構造函數拋出異常,它會處理它分配的任何資源,因為調用者將無法執行。
不,你不能這樣做,這是using
,它以這種方式工作。 您必須自己編寫所需的代碼
值得一提的是,在類型的ctor
中有異常,根本不是一個好主意,所以如果可能的話,可能會將可能引發異常的代碼移動到另一個地方。 最好還有一個方法,並限制你的類型的消費者明確地調用它來實現某些事情並控制情況,然后像你描述的情況那樣。
通常,使用ctor
僅用於構造給定類型的實例和內部值的初始化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.