this MSDN pageuse
पर अंतिम वाक्य के अनुसार using
पर प्राथमिकता दी जानी चाहिए। मैंने इसे कहीं और सुना है (this answer, उदाहरण के लिए)। ऐसा क्यों है? मुझे लगता है कि use
बाद में जोड़ा गया था। लेकिन क्या अंतर है? सतह पर, using
अधिक उपयोगी लगता है क्योंकि आप Dispose()
कहलाते समय नियंत्रित कर सकते हैं, और यदि आवश्यक हो तो आप बाध्य मान (उदा। (fun _ -> ...)
) को स्पष्ट रूप से अनदेखा कर सकते हैं।उपयोग करने से बेहतर क्यों उपयोग किया जाता है?
उत्तर
मुझे लगता है कि use
पसंद करने का कारण यह है कि वाक्यविन्यास सरल है। कई अन्य भाषा संरचनाओं को कार्यों के रूप में व्यक्त किया जा सकता है (उदा। try .. with
, for
, while
, ...)। यदि भाषा डिजाइनरों ने एक सरल वाक्यविन्यास जोड़ा है, तो इसका उपयोग क्यों न करें ...
जैसा कि मैंने earlier answer you referenced में लिखा था, आप use
का उपयोग करते समय भी दायरे को नियंत्रित कर सकते हैं। (और इस तरह, आप
ऑब्जेक्ट एक्सप्रेशन
कक्षा घोषणाओं के रचनाकारों में भी इसका उपयोग कर सकते हैं।) लेकिन अधिकांश समय, स्वचालित व्यवहार ठीक है (जो निर्माण को using
से सी # में सरल बनाता है)।
चाहे आप use
या using
का उपयोग ऐसे परिस्थितियों में करेंगे जहां आपको दायरे को नियंत्रित करने की आवश्यकता है, स्पष्ट रूप से व्यक्तिगत स्वाद का विषय है। यदि आपको use
की स्पष्ट स्कॉपिंग पसंद नहीं है (जो थोड़ा अजीब दिखता है, तो मैं स्वीकार करता हूं, लेकिन मेरे लिए ठीक काम करता है), आप using
का उपयोग कर सकते हैं।
संपादित करें: एक वर्ग घोषणा में, आप उदाहरण लिखने के लिए नहीं कर सकते हैं:
type Foo() =
use a = new Whatever()
// ...
क्योंकि a
के दायरे (संभवतः) होगा उदाहरण के पूरे जीवन भर। (हालांकि मुझे लगता है कि यह उपयोगी हो सकता है और यह आपके प्रकार के IDisposable
के स्वचालित कार्यान्वयन को जोड़ सकता है)। यदि आप using
का उपयोग करते हैं, तो आपको इस तरह की परेशानी नहीं मिलती है।
जब निपटाने के साथ-साथ use
साथ कहा जाता है, बस (कोष्ठक की तरह या begin
- end
) हमेशा की तरह scoping contructs का उपयोग करके आप नियंत्रित कर सकते हैं, उदाहरण के
let F() =
let x = 4
(
use file = System.IO.File.Open("foo.xml", System.IO.FileMode.Append)
let z = 4
printfn "file still open here"
)
printfn "file was already closed/disposed"
लेकिन मुझे लगता है कि यह शायद ही कभी उपयोगी है। मुझे लगता है कि IDisposable
ऑब्जेक्ट का नाम/उपयोग करना भी दुर्लभ नहीं है। use
अधिक वाक्य रचनात्मक रूप से सुविधाजनक है, और 95% समय आपको जो चाहिए वह करता है, इसलिए मुझे लगता है कि यही पसंद है।
इस की सिंटैक्टिक विषमता 'उपयोग' का पक्ष लेने का एक और कारण है। क्या आप जानते हैं कि वे अलग आईएल उत्पादन करते हैं? – Daniel
मुझे उम्मीद है कि वे समान आईएल उत्पन्न करेंगे, हालांकि मुझे नहीं पता या परवाह नहीं है। वाक्य रचनात्मक विषमता के लिए, फिर से, कोई भी इस तरह कोड नहीं लिखता है, क्योंकि कोई भी परवाह नहीं करता है कि 'निपटान' को फ़ंक्शन के अंत से पहले या फ़ंक्शन के अंत में दो पंक्तियों कहा जाता है। परिदृश्य जहां यह महत्वपूर्ण है दुर्लभ हैं। बस 'उपयोग' का प्रयोग करें। – Brian
एक परिदृश्य जहां आपको कुछ लिखने की आवश्यकता होती है _after_ 'उपयोग' स्कोप सिरों का होता है यदि आपको किसी जारी ऑब्जेक्ट (लॉक की गई फ़ाइल को फिर से लिखने योग्य) के लिए सही तरीके से परीक्षण करने की आवश्यकता होती है, या उदाहरण के लिए सेमफोर के साथ। फिर भी, केवल एक फ़ंक्शन में 'उपयोग' को लपेटें और उस फ़ंक्शन को कॉल करने के बाद अपने बाद के रिलीज कोड को कॉल करें, और इस उदाहरण में स्कॉइंग की आवश्यकता नहीं है। – Abel
व्यक्तिगत रूप से, मैं एक ही कारण के लिए using
को use
पसंद करते हैं कि मैं पसंद
let a = some_expr
some_stuff_with_a
को
(fun a -> some_stuff_with_a) some_expr
बाध्यकारी रूप के साथ, आप आमतौर पर कोष्ठक का एक सेट है, और संघ से बच सकते हैं पहचानकर्ता और मूल्य के बीच जो इसे बाध्य किया जा रहा है, अंतरिक्ष में करीब और देखने में आसान है।
use
के खिलाफ एक उदाहरण बेहतर तो using
है:
using
की तुलना में बेहतर use
रूप using
एक लाइन में लिखा जा सकता है, जबकि use
नहीं कर सकता है।
उदाहरण के लिए,
xx
एक संसाधन जो yy
द्वारा खोला जाता है दिया पैरामीटर p
का उपयोग करने से एक समारोह एफसीटी द्वारा एक मूल्य के लौटने की क्रिया है।
let xx p = using (yy(p)) (fun resource-> fct resource) // <-- this is OK
let xx p = (use resource = yy(p); fct resource) // <-- this is Not OK
आपको 'इन' का उपयोग करने की आवश्यकता है, जैसे: ' xx p = (fct संसाधन में संसाधन = yy (p) का उपयोग करें) '। – Tarmil
- 1. क्यों ओजीआई का उपयोग किया जाता है?
- 2. सुहोसिन का उपयोग क्यों किया जाता है?
- 3. क्लैंग का अधिक उपयोग क्यों नहीं किया जाता है?
- 4. क्यों रैंड में 1103515245 का उपयोग किया जाता है?
- 5. LiteralControl क्या है? इसका उपयोग क्यों किया जाता है?
- 6. .NET में प्रतिबिंब का उपयोग क्यों किया जाता है?
- 7. filter_input() का उपयोग करना बेहतर क्यों है?
- 8. आईएसओ में NSUserDefaults का उपयोग क्यों किया जाता है?
- 9. कार्यों के बजाय कन्स्ट्रक्टर का उपयोग क्यों किया जाता है?
- 10. UITableViewCell पहचानकर्ताओं में स्थिर कीवर्ड क्यों उपयोग किया जाता है?
- 11. अभ्यास में क्विकॉर्ट का उपयोग क्यों किया जाता है?
- 12. फॉक्सप्रो पीओएस सिस्टम के लिए क्यों उपयोग किया जाता है?
- 13. io_service, इसका उपयोग क्यों और कैसे किया जाता है?
- 14. टाइपिड कीवर्ड खराब डिज़ाइन का उपयोग क्यों किया जाता है?
- 15. https केवल लॉगिन के लिए क्यों उपयोग किया जाता है?
- 16. + = के लिए क्या उपयोग किया जाता है?
- 17. MySQL क्यों वेब विकास में अक्सर उपयोग किया जाता है?
- 18. Backbone.js: _.bindAll() प्रारंभ में - इसका उपयोग क्यों किया जाता है?
- 19. क्यों Erlang चर का उपयोग नहीं किया जाता है?
- 20. @JsonProperty प्रॉपर्टी का उपयोग कब किया जाता है और इसके लिए क्या उपयोग किया जाता है?
- 21. ImmutableObjectAttribute का उपयोग कैसे किया जाता है?
- 22. स्ट्रिंगियो का उपयोग कब किया जाता है?
- 23. स्ट्रिंगटोकनाइज़र का बहिष्कार क्यों किया जाता है?
- 24. लेआउट का उपयोग कैसे किया जाता है?
- 25. रिवर्स इंजीनियरिंग कहां उपयोग किया जाता है?
- 26. फ़ोनगैप कितना उपयोग किया जाता है
- 27. getChildDrawingOrder को गलत तरीके से बुलाया/उपयोग किया जाता है?
- 28. AssemblyInfo.cs के लिए उपयोग किया जाता है?
- 29. एमडी 5 अभी भी व्यापक रूप से उपयोग क्यों किया जाता है
- 30. mod_deflate बनाम Django GZipMiddleware, जो तैनाती के लिए उपयोग करने के लिए उपयोग किया जाता है?
मैंने ऑब्जेक्ट एक्सप्रेशन के साथ प्रयोग किया और आपके द्वारा उल्लिखित सीमा को समझ नहीं पाया। क्या आप विस्तार से बता सकते हैं? – Daniel
@ Daniel: क्षमा करें, मुझे कक्षा घोषणाएं कहना था - ऑब्जेक्ट एक्सप्रेशन नहीं! –
मुझे अभी भी सीमा नहीं मिल रही है। 'का उपयोग' एक कन्स्ट्रक्टर के भीतर ठीक काम करने लगता है। – Daniel