2009-02-18 13 views
5

शिकार: Uses of "using" in C#उपयोग करने का उद्देश्य क्या है?

मैंने देखा है लोगों के लिए उपयोग निम्न और इसके उद्देश्य क्या है मैं सोच रहा हूँ? क्या यह कचरा संग्रह द्वारा उपयोग के बाद वस्तु को नष्ट कर दिया गया है?

उदाहरण:

using (Something mySomething = new Something()) { 
    mySomething.someProp = "Hey"; 
} 
+0

http://stackoverflow.com/questions/75401/uses-of-using-in-c – tvanfosson

+0

का डुप्लिकेट यह एक साधारण Google खोज और एमएसडीएन दस्तावेज़ में भी पाया जाता है। –

+0

@ चार्ल्स: और जीआईवाईएफ उत्तरों का यहां स्वागत नहीं है। – GEOCHET

उत्तर

2

कथन का उपयोग निपटान के लाभदायक प्रभाव जो कुछ भी है() जब आप ब्लॉक का उपयोग को पूरा करें।

4

उपयोग कथन यह सुनिश्चित करता है कि ऑब्जेक्ट पर विधियों को कॉल करते समय अपवाद तब भी होता है जब कोई अपवाद होता है।

2

आप using का उपयोग कर सकते हैं जब Something कक्षा IDisposable लागू करती है। यह सुनिश्चित करता है कि यदि आप using ब्लॉक के अंदर अपवाद दबाते हैं तो ऑब्जेक्ट को सही ढंग से निपटाया जाता है।

यानी, आपको Dispose पर कॉल करने के लिए संभावित अपवादों को मैन्युअल रूप से प्रबंधित करने की आवश्यकता नहीं है, using ब्लॉक स्वचालित रूप से आपके लिए यह करेगा।

यह इस के बराबर है:

Something mySomething = new Something(); 
try 
{ 
    // this is what's inside your using block 
} 
finally 
{ 
    if (mySomething != null) 
    { 
     mySomething.Dispose(); 
    } 
} 
6

तब्दील हो, मोटे तौर पर, करने के लिए उपयोग करना:

Something mySomething = new Something(); 
try 
{ 
    something.someProp = "Hey"; 
} 
finally 
{ 
    if(mySomething != null) 
    { 
    mySomething.Dispose(); 
    } 
} 

और है कि यह काफी है। इसका उद्देश्य निर्धारिक निपटान का समर्थन करना है, सी # के पास ऐसा कुछ नहीं है क्योंकि यह एक कचरा एकत्रित भाषा है। उपयोग/निपटान पैटर्न प्रोग्रामर को यह निर्दिष्ट करने का एक तरीका देते हैं कि जब कोई प्रकार अपने संसाधनों को साफ़ करता है।

+0

@ रैंडोल्फो, काफी नहीं। ऑब्जेक्ट को कोशिश के बाहर तुरंत चालू किया गया है ... आखिरकार ब्लॉक करें। यदि ऑब्जेक्ट तुरंत चालू करने में विफल रहता है तो उसे निपटान करने की आवश्यकता नहीं है। – LukeH

+0

@ रैंडोल्फो, और जेनरेट आईएल यह भी जांच करेगा कि ऑब्जेक्ट कॉल करने का प्रयास करने से पहले ऑब्जेक्ट शून्य नहीं है। – LukeH

+0

अच्छे अंक, ल्यूक। मैंने "मोटे तौर पर" के साथ प्रस्तावना किया, याद रखें .; – Randolpho

1

का उपयोग कर

try 
{ 
    ... 
} 
finally 
{ 
    myObj.Dispose(); 
} 

में अनुवाद हो जाता है जब संकलन (IL में तो)।

तो मूल रूप से आपको इसे प्रत्येक ऑब्जेक्ट के साथ उपयोग करना चाहिए जो IDisposable लागू करता है।

0

'उपयोग' ब्लॉक ब्लॉक से बाहर निकलने पर किसी ऑब्जेक्ट की 'निपटान' विधि को गारंटी देने का एक तरीका है।

यह उपयोगी है क्योंकि आप ब्रेक के कारण सामान्य रूप से उस ब्लॉक से बाहर निकल सकते हैं, क्योंकि आप लौट आए हैं, या अपवाद के कारण।

आप 'कोशिश/अंत' के साथ एक ही काम कर सकते हैं, लेकिन 'उपयोग' से यह स्पष्ट हो जाता है कि आपका क्या मतलब है और उसे वें ब्लॉक के बाहर घोषित एक चर की आवश्यकता नहीं है।

संबंधित मुद्दे