वास्तव में केवल कुछ मामले हैं जहां स्पष्ट रेफ पैरामीटर एक कार्यात्मक बिंदु से उपयोगी होते हैं।
एक उदाहरण मैंने देखा है:
public static void Swap<T>(ref T a, ref T b)
{
var temp = a;
a = b;
b = temp;
}
इस तरह की एक विधि उदाहरण के लिए, किसी प्रकार का एल्गोरिदम में उपयोगी है।
एक कारण रेफ पैरामीटर कभी-कभी उपयोग किए जाते हैं, एक अनुकूलन तकनीक के रूप में है। कभी-कभी एक बड़ी संरचना (मान प्रकार) को रेफरी द्वारा पारित किया जाता है, भले ही बुलाए गए तरीके को स्ट्रक्चर सामग्री को कॉपी करने से बचने के लिए स्ट्रक्चर के मूल्य को संशोधित करने का कोई इरादा न हो। आप तर्क दे सकते हैं कि एक बड़ी संरचना एक कक्षा (यानी एक संदर्भ प्रकार) बेहतर होगी, लेकिन जब आप इस तरह के ऑब्जेक्ट्स के बड़े सरणी रखते हैं तो नुकसान होता है (उदाहरण के लिए ग्राफिक्स प्रोसेसिंग में)। अनुकूलन होने के नाते, ऐसी तकनीक कोड पठनीयता में सुधार नहीं करती है, लेकिन कुछ परिस्थितियों में प्रदर्शन में सुधार करती है।
पॉइंटर्स के बारे में एक समान प्रश्न पूछा जा सकता है। सी # में unsafe
और fixed
कीवर्ड के माध्यम से पॉइंटर्स के लिए समर्थन है। उन्हें किसी कार्यात्मक दृष्टिकोण से शायद ही कभी आवश्यकता होती है: मैं वास्तव में उस फ़ंक्शन के बारे में सोच नहीं सकता जिसे पॉइंटर्स के उपयोग के बिना कोड नहीं किया जा सका। लेकिन पॉइंटर्स का उपयोग भाषा को अधिक अभिव्यक्तिपूर्ण बनाने या कोड को अधिक पठनीय बनाने के लिए नहीं किया जाता है, इन्हें निम्न स्तर अनुकूलन तकनीक के रूप में उपयोग किया जाता है।
असल में, संदर्भ द्वारा एक संरचना को पार करना वास्तव में संरचना के डेटा में सूचक को पास करने का एक सुरक्षित तरीका है, जो बड़े structs के लिए एक सामान्य निम्न स्तर अनुकूलन तकनीक है।
एक ऐसी सुविधा है जो कम स्तर के अनुकूलन को विरासत सुविधा प्रदान करती है? यह आपके दृष्टिकोण पर निर्भर हो सकता है, लेकिन आप केवल सी # उपयोगकर्ता नहीं हैं। उनमें से कई आपको बताएंगे कि पॉइंटर्स और अन्य निम्न स्तर की संरचनाओं की उपलब्धता कुछ अन्य भाषाओं में सी # के बड़े फायदों में से एक है। मैं एक के लिए नहीं सोचता कि रेफ पैरामीटर एक विरासत विशेषता है, वे कुछ परिदृश्यों में उपयोगी भाषा का एक अभिन्न हिस्सा हैं।
इसका मतलब यह नहीं है कि को रेफ पैरामीटर का उपयोग करना है, जैसे कि आपको LINQ, async/await या किसी अन्य भाषा सुविधा का उपयोग करने की आवश्यकता नहीं है। बस खुश रहें जब आपको इसकी आवश्यकता हो।
स्रोत
2015-09-08 04:10:40
क्या होगा यदि आपने एक फ़ंक्शन को परिभाषित किया है जिसे किसी के मान को समायोजित करना है, लेकिन दो, या अधिक (मान प्रकार) चर? – Adimeus
उदाहरण वास्तव में काफी स्पष्ट है। यह बिल्कुल दिखाता है कि कैसे 'रेफरी' काम करता है और इसका उपयोग करने के लिए आप कैसे हैं। हालांकि, मैं ईमानदारी से ऐसी स्थिति के बारे में नहीं सोच सकता जहां एक _has_ किसी और चीज़ पर 'रेफरी' का उपयोग करने के लिए है, इसलिए मैं कुछ जवाब भी देखना चाहूंगा। –
क्या होगा यदि मैं बुलाए गए फ़ंक्शन का उपयोग करके 2 चर अपडेट करना चाहता हूं? रेफरी के रूप में 2 चर को चिह्नित करके इस मामले में रेफरी सहायक हो सकती है। – DarkKnight