उसके बीच क्या अंतर है और सिर्फ एक विधि है जो एक सूची या एक सरणी प्राप्त करती है?
के बीच भिन्नता
void M(params int[] x)
तथा
void N(int[] x)
यह है कि M को इस तरह कहा जा सकता है:
M(1, 2, 3)
या इस तरह:
M(new int[] { 1, 2, 3 });
लेकिन एन को केवल दूसरे तरीके से बुलाया जा सकता है , पहला तरीका नहीं।
शायद इसका प्रदर्शन में कुछ प्रभाव है?
प्रदर्शन का प्रभाव यह है कि आप M
पहले तरीके से कॉल करते हैं या दूसरे तरीके से, किसी भी तरह से आप एक सरणी बना सकते हैं। एक सरणी बनाने का प्रदर्शन प्रभाव पड़ता है क्योंकि इसमें समय और मेमोरी दोनों लगते हैं। याद रखें कि प्रदर्शन प्रभावों को प्रदर्शन लक्ष्यों के खिलाफ मापा जाना चाहिए; यह संभावना नहीं है कि एक अतिरिक्त सरणी बनाने की लागत गेटिंग कारक है जो बाज़ार में सफलता और विफलता के बीच का अंतर है।
मुझे पूरी तरह से समझ में नहीं आया है कि आप किस तरह से असीमित मापदंडों के साथ पसंद करेंगे।
यह विशुद्ध रूप से और पूरी तरह से कोड के लेखक के लिए एक सुविधा है जो विधि को बुला रहा है; यह केवल छोटा है और लिखना आसान है
M(1, 2, 3);
लिखने के बजाय
M(new int[] { 1, 2, 3 });
यह बस फोन करने वाले की ओर से कुछ कीस्ट्रोक्स बचाता है। बस इतना ही।
कुछ सवाल जो आपने नहीं पूछे लेकिन शायद आप इसका जवाब जानना चाहेंगे:
इस सुविधा को क्या कहा जाता है?
वे तरीके जो कॉल करने वाले की ओर से तर्क की एक चर संख्या को पारित करने की अनुमति देते हैं उन्हें वैरेडिक कहा जाता है । Params विधियाँ C # को चर विधियों को कैसे लागू करती हैं।
ओवरलोड रिज़ॉल्यूशन एक वैरेडिक विधि के साथ कैसे काम करता है?
जब ओवरलोड रिज़ॉल्यूशन समस्या का सामना करना पड़ता है, तो C # "सामान्य" और "विस्तारित" दोनों रूपों पर विचार करेगा, और "सामान्य" फ़ॉर्म हमेशा जीतता है यदि दोनों लागू होते हैं। उदाहरण के लिए, इस पर विचार करें:
void P(params object[] x){}
और हमारे पास एक कॉल है
P(null);
दो लागू संभावनाएं हैं। "सामान्य" रूप में, हम P
सरणी के लिए एक अशक्त संदर्भ कहते हैं और पास करते हैं। "विस्तारित" रूप में, हम कॉल करते हैं P(new object[] { null })
। इस मामले में, सामान्य रूप जीतता है। यदि हमारे पास कॉल था P(null, null)
तो सामान्य रूप अनुचित और विस्तारित रूप डिफ़ॉल्ट रूप से जीतता है।
चुनौती : मान लीजिए कि हमारे पास var s = new[] { "hello" };
एक कॉल है P(s);
। बताएं कि कॉल साइट पर क्या होता है और क्यों। आप हैरान हो सकते हैं!
चैलेंज : मान लीजिए हम दोनों है void P(object x){}
और void P(params object[] x){}
। क्या करता P(null)
है, और क्यों करता है?
चैलेंज : मान लीजिए हम दोनों है void M(string x){}
और void M(params string[] x){}
। क्या करता M(null)
है, और क्यों करता है? यह पिछले मामले से कैसे भिन्न है?