C # संदर्भ को पास करने के लिए तर्क देने के लिए ref
और out
कीवर्ड प्रदान करता है । दोनों का शब्दार्थ बहुत समान है। एकमात्र अंतर fluted चर के आरंभ में है:
ref
फ़ंक्शन को पास करने से पहले वैरिएबल को इनिशियलाइज़ करनाout
पड़ता है , नहीं।out
चर को फ़ंक्शन के अंदर आरंभीकृत करने की आवश्यकता होती है,ref
नहीं।
इन दोनों खोजशब्दों के उपयोग के मामले भी लगभग समान हैं, और इनका बहुत अधिक बार उपयोग किया जाता है I एक कोड गंध माना जाता है (हालाँकि पैटर्न TryParse
और TryGetValue
पैटर्न जैसे मान्य उपयोग के मामले हैं )।
इस वजह से कोई समझा सकता है, इतने संकीर्ण उपयोग के मामलों के लिए C # में दो समान उपकरण क्यों हैं?
इसके अलावा, MSDN पर , यह कहा जाता है कि उनके पास अलग-अलग रन-टाइम व्यवहार है:
हालाँकि, रेफ और आउट कीवर्ड अलग-अलग रन-टाइम व्यवहार का कारण बनते हैं, लेकिन संकलन समय पर उन्हें विधि हस्ताक्षर का हिस्सा नहीं माना जाता है।
उनका रन-टाइम व्यवहार कैसे अलग है?
निष्कर्ष
दोनों उत्तर सही लगते हैं, आप दोनों को धन्यवाद। मैंने jmoreno को स्वीकार कर लिया है क्योंकि यह अधिक स्पष्ट है।
ref
C ++ की तरह ही कार्यान्वित हैं ; प्रश्न में वस्तु सूचक (या आदिम) को इंगित करता है। यानीInt32.TryParse(myStr, out myInt)
(C #) उसी तरह "निष्पादित"int32_tryParse(myStr, &myInt)
होता है जैसे (C) होगा; कीड़े को रोकने के लिए संकलक द्वारा लागू किए जाने वाले कुछ अवरोधों में एकमात्र अंतर। (मैं इसे एक उत्तर के रूप में पोस्ट करने वाला नहीं हूं क्योंकि मैं गलत हो सकता हूं कि यह पर्दे के पीछे कैसे काम करता है, लेकिन यह है कि मैं इसे कैसे काम करता हूं कल्पना करता हूं [क्योंकि यह समझ में आता है])