अब सी # नामित पैरामीटर का समर्थन करता है, मैं यह देखने के लिए जांच कर रहा था कि वीबी ने ऐसा किया था, और पाया कि इसमें थोड़ा अंतर है। इस तरह एक पुस्तकालय समारोह उदाहरण के लिए ले लो:सी # और वीबी हैंडल पैरामीटर नाम के बीच मतभेद?
public static void Foo(string a, string b)
{
Console.WriteLine(string.Format("a: {0}, b: {1}", a, b));
}
सी # में, यदि आप इसे इस तरह कहते हैं:
Foo(a: "a", b: "b");
संकलक निम्नलिखित आईएल निर्देश का उत्पादन:
.locals init (
[0] string CS$0$0000,
[1] string CS$0$0001)
L_0000: nop
L_0001: ldstr "a"
L_0006: stloc.0
L_0007: ldstr "b"
L_000c: stloc.1
L_000d: ldloc.0
L_000e: ldloc.1
L_000f: call void [TestLibrary]TestLibrary.Test::Foo(string, string)
L_0014: nop
L_0015: ret
जो निम्नलिखित सी # कोड में अनुवाद करता है:
string CS$0$0000 = "a";
string CS$0$0001 = "b";
Test.Foo(CS$0$0000, CS$0$0001);
वीबी में, यदि आप इसे इस तरह कहते हैं:
Foo(a:="a", b:="b")
संकलक निम्नलिखित आईएल निर्देश का उत्पादन:
L_0000: nop
L_0001: ldstr "a"
L_0006: ldstr "b"
L_000b: call void [TestLibrary]TestLibrary.Test::Foo(string, string)
L_0010: nop
L_0011: nop
L_0012: ret
निम्नलिखित में से कौन VB कोड के लिए अनुवाद:
Foo("a", "b");
जिस तरह से वीबी को बहुत कम निर्देश कॉल की आवश्यकता होती है, तो सी # लागू करने के तरीके के लिए कोई फायदा है? यदि आप नामित पैरामीटर का उपयोग नहीं करते हैं, तो सी # वीबी के समान काम करता है।
संपादित: अब हम निर्धारित किया है कि कि अतिरिक्त निर्देश रिलीज़ मोड में चले जाओ, वहाँ एक विशेष कारण उन्हें डिबग मोड में उपस्थित होने के लिए है? वीबी दोनों मोड में समान कार्य करता है, और सी # सामान्य पैरामीटर के बिना विधि को कॉल करते समय अतिरिक्त निर्देश नहीं डालता है (जब आप वैकल्पिक पैरामीटर का उपयोग करते हैं)।
पैरामीटर पर स्विच ऑर्डर करें, फू (बी: = "बी", ए: = "ए") अंतर देखने के लिए (संकेत: साइड इफेक्ट ऑर्डर) – adrianm
बराबर वीबी कोड क्या है? –
@adrianm एक दिलचस्प विचार है, लेकिन मैंने अभी कोशिश की है (जिज्ञासा से बाहर) और जो एक ही आईएल को 'फू (ए: "ए", बी: "बी") के रूप में उत्पन्न करता है; ' –