2010-11-24 13 views
6

यदि मेरे पास निम्न है, तो क्या प्रयोज्य अभी भी डिस्पोजेबल ऑब्जेक्ट पर कॉल किया जाएगा, या ऑब्जेक्ट खोला जाएगा क्योंकि एक गैर-प्रबंधित अपवाद का सामना करना पड़ रहा है?क्या असमर्थनीय कॉल किया गया है यदि अन-हैंडल अपवाद एक उपयोग वक्तव्य में लागू किया गया है?

using (DisposeableObject = new Object()) 
{ 
    throw new Exception("test"); 
} 
+0

http://stackoverflow.com/questions/1404769/when-would-dispose-method-not-get-called की संभावित डुप्लिकेट – SRM

उत्तर

0

एमएसडीएन, yes के अनुसार। जब नियंत्रण using कथन का दायरा छोड़ देता है, तो इसे निपटाने की अपेक्षा करें।

0

ऑब्जेक्ट का निपटारा किया जाएगा क्योंकि अपवाद बुलबुले होने पर आप दायरे से बाहर आ जाएंगे।

देखें: using Statement (C# Reference)

कथन का उपयोग सुनिश्चित करता है निपटान में कहा जाता है कि एक अपवाद तब होता है, भले ही जब तुम वस्तु पर तरीकों बुला रहे हैं। आप ऑब्जेक्ट को एक कोशिश ब्लॉक के अंदर डालकर और अंततः ब्लॉक में निपटान करके उसी परिणाम को प्राप्त कर सकते हैं; वास्तव में, इस प्रकार कथन का अनुवाद कंपाइलर द्वारा किया जाता है।

5

एक using एक try...finally में अपने कोड लपेटकर और में अंत में, तो हाँ, यह कहा जाना चाहिए निपटाने की तरह है।

2

कोशिश करने के लिए विस्तार से विस्तार से उपयोग करके .. आखिरकार, यह निपटान कॉल करेगा।

2

आपके द्वारा प्रदान किए गए उदाहरण में अपवाद को फेंकने से पहले कहा जाएगा।

कि निपटाने कहा जाता हो जाता है यह सुनिश्चित करने के लिए सामान्य कोड usings बयान

तरह
var connection= new SqlConnection(connectionString); 
try 
{ 
    // do something with the connection here 
} 
finally 
{ 
    connection.Dispose(); 
} 

इस तरह के एक बोझिल बयान लिखने के लिए जरूरत की जगह लग रहा है।

using(var connection = new SqlConnection(connectionString)) 
{ 
    // do something with the connection here 
} 
संबंधित मुद्दे