स्थानीय चर की तरह एक गैर-रेफरी, गैर-आउट पैरामीटर, भंडारण स्थान को इंगित करता है। यदि संग्रहण स्थान का प्रकार एक संदर्भ प्रकार है, तो संग्रहण स्थान उस प्रकार के उदाहरण के संदर्भ में है।
विपरीत रूप से रेफरी और आउट पैरामीटर एक संग्रहण स्थान का संदर्भ रखें। वह भंडारण स्थान एक स्थानीय चर, एक फ़ील्ड, या एक सरणी तत्व हो सकता है। दूसरे शब्दों में, रेफरी और आउट पैरामीटर संकेतों की एक और परत पेश करते हैं। यदि आपके पास किसी विधि में संदर्भ-प्रकार रेफरी या आउट पैरामीटर है, तो यह किसी ऑब्जेक्ट के संदर्भ के संदर्भ का प्रतिनिधित्व करता है।
आप किसी ऑब्जेक्ट के संदर्भ का संदर्भ क्यों लेना चाहते हैं? यदि आपको ऑब्जेक्ट के संदर्भ को संशोधित करने की आवश्यकता है (जैसा ऑब्जेक्ट को संशोधित करने के विपरीत)।
यह कुछ संकीर्ण परिस्थितियों में एक उपयोगी तकनीक है।यदि आप एक विधि से एक से अधिक मूल्य वापस करना चाहते
void OrderQueues(ref Queue<int> a, ref Queue<int> b)
{
if (a.Peek <= b.Peek) return;
var temp = a;
a = b;
b = temp;
}
मापदंडों आउट उपयोगी होते हैं:
उदाहरण के लिए, यदि आप एक समारोह है कि दो कतारों जिस पर शीर्ष पर छोटे महत्व है निर्भर करता है का आदेश देता लिखने के लिए चाहते हो सकता है
void OldestAndYoungest(IEnumerable<Person> people, out Person youngest, out Person oldest)
{
youngest = null;
oldest = null;
foreach (var person in people)
{
if (youngest == null || person.Age < youngest.Age)
youngest = person;
if (oldest == null || oldest.Age < person.Age)
oldest = person;
}
}
मेरे अनुभव में, रेफरी और आउट पैरामीटर काफी दुर्लभ हैं, और संदर्भ प्रकारों के साथ भी दुर्लभ हैं।
ध्यान दें कि एक रेफरी पैरामीटर कॉलर द्वारा प्रारंभ किया जाना चाहिए, जबकि आउट पैरामीटर को कैली द्वारा प्रारंभ किया जाना चाहिए। यदि आप कभी भी पैरामीटर को मान निर्दिष्ट नहीं करते हैं, तो यह शायद "सामान्य" पैरामीटर होना चाहिए। यदि आप किसी आउट पैरामीटर को कोई मान निर्दिष्ट नहीं करते हैं, जैसा कि आपके उदाहरण में है, तो आपका कोड संकलित नहीं होगा।