क्या VB.NET के पास C # out
फ़ंक्शन पैरामीटर्स के बराबर प्रत्यक्ष है , जहां फ़ंक्शन में पारित होने वाले वेरिएबल को आरंभीकृत करने की आवश्यकता नहीं है?
जवाबों:
नहीं, out
VB में कीवर्ड का कोई समकक्ष नहीं है ।
हालांकि, VB एक विधि में सभी स्थानीय चर को स्वचालित रूप से आरंभ करता है, इसलिए आप ByRef
पहले चर को स्पष्ट रूप से आरंभ करने की आवश्यकता के बिना उपयोग कर सकते हैं ।
उदाहरण:
Sub Main()
Dim y As Integer
Test(y)
End Sub
Sub Test(ByRef x As Integer)
x = 42
End Sub
(यदि आप फ्रेमवर्क में कोड की जांच करते हैं (उदाहरण के लिए Double.TryParse ), तो आप <OutAttribute>
मापदंडों में जोड़ा जा सकता है , लेकिन यह तभी फर्क पड़ता है जब कॉल COM इंटरॉप या प्लेटफ़ॉर्म इनवोक के लिए marshalled हो।)
ByRef
। (यह मूल्य प्रकार के मापदंडों के साथ नहीं होता है।)
Nothing
उन्हें असाइन करने पर चेतावनी की स्थिति से छुटकारा मिल जाएगा यह परिणाम नहीं बदलता है।
Nothing
उन्हें अब तक काम सौंप रहा हूं । जैसा कि मैंने किया है यह एक बड़ी विरासत वेबसाइट में सैकड़ों बार करने के लिए बस समय लेने वाला है। जांच के लिए धन्यवाद।
Out
विशेषता C # कीवर्ड के बराबर नहीं हैout
।
नहीं, इसमें कोई समकक्ष निर्माण एक गैर initialised चर एक चेतावनी के बिना एक विधि को पास करने की अनुमति देता है कि के रूप में मेरे में उल्लेख किया है, लेकिन, सवाल-जवाब एक को निर्दिष्ट <Out()>
विशेषता एक पर ByRef
, पैरामीटर परिभाषा हालांकि वीबी यह ध्यान नहीं देता, है सी # द्वारा इलाज एक out
पैरामीटर के रूप में ।
इसलिए, मैं रेफरेंस वेरिएबल्स को प्री-इनिशियलाइज़ करूंगा Nothing
और<Out()> ByRef
इरादे को निर्दिष्ट करने के लिए निर्दिष्ट करूंगा (यदि सी # यूजर्स कभी आपके तरीकों को एक्सेस करते हैं तो यह काम करेगा)।
यदि आपको लगता है यदि आप जानते हैं कि जब आप डिफ़ॉल्ट का उपयोग करने का इरादा Nothing
अन्यथा निर्दिष्ट नहीं किए गए संदर्भ चर में आप "चेतावनी विन्यास" सेट कर सकते हैं "का प्रयोग चर" असाइनमेंट से पहले करने के लिए कोई नहीं "" शायद परियोजना स्तर (प्रोजेक्ट गुण> संकलित पर, और आप इस सेटिंग को बदलने से पहले "सभी कॉन्फ़िगरेशन" पर कॉन्फ़िगरेशन सेट करना चाहते हैं, या, VS2015 (VB.NET 14) में, आप उपयोग कर सकते हैं #Disable Warning BC42030
।
सी # संस्करण
void TestFunc(int x, ref int y, out int z) {
x++;
y++;
z = 5;
}
Vb.net संस्करण
Sub TestFunc(ByVal x As Integer, ByRef y As Integer, ByRef z As Integer)
x += 1
y += 1
z = 5
End Sub
अपडेट करें
जैसा कि टिप्पणी में कहा गया है कि अपने पैरामीटर को इनिशिएट करना न भूलें जो आउट स्लॉट में उपयोग किया जाएगा
मुझे VB.NET में समस्या थी कि मैंने एक फ़ंक्शन "Ref by" कहा, जो एक ऐरे से गुजरा।
हालांकि संकलक ने इसे एक चेतावनी के रूप में चिह्नित किया, यह ठीक था। फिक्स सुपर सरल और शायद अच्छा प्रोग्रामिंग अभ्यास है।
मैं बदल गया
Dim m_arr_values() as Integer
fnRetArray(m_arr_values)
सेवा
' Even though 'Nothing' is the default value, setting it
' stops the compiler complaining.
Dim m_arr_values() as Integer = Nothing
fnRetArray(m_arr_values)
यह तब भी मदद करता है जब चर नाम वर्णनात्मक हो तो कोडिंग ...
Sub fnCreatePalette(ByRef arr_in_pal() As color, ByRef arr_out_pal() as uinteger)
...
End Sub
आप VB.NET में संदर्भ विधि द्वारा पास का उपयोग कर सकते हैं।
आपको C # में आउट पैरामीटर मेकेनिज्म की आवश्यकता है, क्योंकि यह आपको किसी भी वेरिएबल को बिना इनिशियलाइज़ किए उपयोग नहीं करने देता है।
VB.NET को एक विशेष कीवर्ड की आवश्यकता नहीं है क्योंकि यह स्वचालित रूप से इसे स्वयं करता है।
बस ByRef का उपयोग करें।
VB में वह विशेषता है जो C # आउट के समान होनी चाहिए लेकिन आज भी आपको इसका उपयोग करने पर भी चेतावनी मिलती है। गिथब के vblang क्षेत्र में इसे ठीक करने के बारे में विवरण हैं। https://github.com/dotnet/vblang/issues/67 ।
Object
, इसलिए इसका उपयोगByRef x As Integer
पैरामीटर के लिए नहीं किया जा सकता है )।