2012-10-22 6 views
7

सी # .NET में, संदर्भ वस्तुओं के रूप में वस्तुओं की एक चर संख्या को पारित करने का कोई तरीका है? उदाहरण के लिए:सी # संदर्भ पैरामीटर की एक चर संख्या को पारित करना

MyMethod (ref param1, ref param2, ref param3) 

... विभिन्न प्रकार के पैरामीटर के साथ, किसी भी प्रकार के पैरामीटर के साथ।

उत्तर

5

नहीं, यह संभव नहीं है: तर्कों की परिवर्तनीय संख्या को सरणी पास करने के शीर्ष पर "वाक्य रचनात्मक चीनी" के रूप में लागू किया गया है; पास-बाय-रेफरेंस पैरामीटर की सरणी बनाना संभव नहीं है, क्योंकि "संदर्भ द्वारा पारित किया गया है" एक प्रकार की संपत्ति नहीं है।

6

यदि आप अनियंत्रित __arglist और __refvalue कीवर्ड सी # में कीवर्ड का उपयोग करने के इच्छुक हैं, तो आप कर सकते हैं।

सावधानी: undocumented सुविधाओं सी # के भविष्य के संस्करणों में परिवर्तन के अधीन हैं। इन कीवर्ड का केवल तभी उपयोग करें जब आपको यह समझना पड़े कि आपका कोड काम करना बंद कर सकता है यदि माइक्रोसॉफ्ट अगले संस्करण में अपना व्यवहार बदलता है।

उदाहरण के लिए, निम्नलिखित कार्यक्रम GetRandomValues विधि के संदर्भ द्वारा तीन int चर गुजरता है। यह 2, 1, और 4 आउटपुट करता है, यह दर्शाता है कि चर सफलतापूर्वक संशोधित किए गए थे।

static void Main() 
{ 
    int x = 0, y = 0, z = 0; 
    GetRandomValues(__arglist(ref x, ref y, ref z)); 
    Console.WriteLine(x); 
    Console.WriteLine(y); 
    Console.WriteLine(z); 
} 

static void GetRandomValues(__arglist) 
{ 
    Random random = new Random(1); 
    ArgIterator iterator = new ArgIterator(__arglist); 
    while (iterator.GetRemainingCount() > 0) 
    { 
     TypedReference r = iterator.GetNextArg(); 
     __refvalue(r, int) = random.Next(0, 10); 
    } 
}