2011-02-10 15 views
20

अगर मैं गए हैं:सी # - गतिशील पैरामीटर बॉक्सिंग

void Foo(dynamic X) { 
} 

और फिर:

Foo(12); 

चाहेंगे 12 बॉक्सिंग हो सकते हैं? मैं कल्पना नहीं कर सकता कि यह होगा, मैं सिर्फ विशेषज्ञों से पूछना चाहता हूं।

+2

आप कल्पना क्यों करते हैं कि यह नहीं होगा? आप कैसे सोचते हैं कि रनटाइम * ऑब्जेक्ट के रूप में नहीं * अज्ञात संकलन-समय प्रकार * का मान संग्रहीत कर रहा है? (यह एक अशिष्ट सवाल नहीं है; मुझे इस बारे में जानने में दिलचस्पी है कि क्यों लोगों की अंतर्ज्ञान उन्हें भाषा सुविधाओं के बारे में झूठी चीजों पर विश्वास करने के लिए प्रेरित करती है ताकि हम भविष्य में बेहतर सुविधाओं को डिजाइन करने का प्रयास कर सकें।) –

+0

क्या आप सी # टीम पर हैं ?? यह मेरे हिस्से पर एक उचित धारणा नहीं थी। सी # में जोड़े गए सभी आश्चर्यजनक शानदार सुविधाओं के साथ, कभी-कभी भूलना आसान होता है कि सी # अभी भी एक स्थिर टाइप की गई भाषा है, तो यह कवर के तहत ऑब्जेक्ट नहीं हो सकता है। यदि आप सी # टीम पर हैं, तो लैम्ब्डा अभिव्यक्तियों के लिए धन्यवाद। कभी भी सर्वश्रेष्ठ भाषा सुविधा। –

+2

@ एडम: आपका स्वागत है। मुझे लैम्ब्डा अभिव्यक्तियों को बहुत अधिक लागू करने का आनंद मिला और मुझे खुशी है कि आप उनका उपयोग कर आनंद ले रहे हैं! –

उत्तर

14

हां, यह होगा।

हुड के अंतर्गत, एक dynamic प्रकार बस कुछ मेटा डेटा के साथ एक object है, इसलिए मूल्य-प्रकार जब एक चर, क्षेत्र, या प्रकार dynamic के पैरामीटर में डाल दिया बॉक्सिंग हो जाएगी।

विधि वास्तव में इस के रूप में संकलित किया जाएगा:

void Foo([Dynamic] object X) 
{ 
} 

DynamicAttribute here बारे में अधिक पढ़ें। यह बुला कोड के लिए

आईएल:

.method private hidebysig static void Main(string[] args) cil managed 
{ 
    .entrypoint 
    .maxstack 8 
    L_0000: nop 
    L_0001: ldc.i4.s 12 
    L_0003: box int32 
    L_0008: call void ConsoleApplication13.Program::Foo(object) 
    L_000d: nop 
    L_000e: ret 
} 
+0

मुझे डूबने वाली भावना थी जो जवाब होगा। धन्यवाद। –

1

हां। चेक टाइप करने के लिए एक मान प्रकार को बॉक्स किया जाना चाहिए।

0

हाँ!

इसके मूल्य के बाद से, इसे बॉक्स किया जाएगा।

संबंधित मुद्दे