बीसीएल में कई विधियों को [MethodImpl(MethodImplOptions.InternalCall)]
विशेषता के साथ चिह्नित किया गया है। यह indicates कि "विधि सामान्य भाषा रनटाइम के भीतर ही लागू की जाती है"।MethodImplOptions.InternalCall का क्या मतलब है?
निर्दिष्ट सीआईएल निर्देशों को निर्दिष्ट करने के तरीके में ढांचे को डिजाइन करने का क्या मतलब था कि रनटाइम को लागू करने के लिए मजबूर किया जाएगा? आखिरकार, विशेषता रनटाइम के लिए संविदात्मक दायित्वों का निर्माण कर रही है, लेकिन एक तरह से जो मुझे भ्रमित करने के लिए प्रतीत होता है और तुरंत स्पष्ट नहीं होता है।
public static double Pow(double x, double y)
{
ldarg.0
ldarg.1
pow // Dedicated CIL instruction
ret
}
:
उदाहरण के लिए, Math.Pow
इस तरह से (यह केवल एक नमूना मेरी बात समझाने के लिए सी # + आईएल और आईएल ही अगर यह बुरा है की मेरी अनौपचारिक मिश्रण बहाना) लिखा गया हो सकता वर्तमान तरीके के बजाय:
[MethodImpl(MethodImplOptions.InternalCall)]
public static double Pow(double x, double y);
MethodImplOptions.InternalCall
क्यों मौजूद है?
ऐसा नहीं है कि यह काम नहीं कर सका, यह सिर्फ घबराहट से घिरा हुआ है। स्टैक लेनदेन आईएल ऑपकोड के लिए निहित हैं, फ़ंक्शन हस्ताक्षर से निपटने के लिए बहुत सारे टूलिंग को अद्यतन करना होगा। जब यह मेटाडेटा में घोषणा है तो यह मुफ्त में है। और आसानी से एक्मा -335 मानक से परे एक्स्टेंसिबल। –
@ हंस: अब नए आईएल निर्देशों के लिए समर्थन जोड़ने के बारे में सवाल था? मुझे समझ में आया कि एनी जानना चाहता था कि पहले स्थान पर 'आंतरिक कॉल' विधियां क्यों थीं। बस पूछ रहा है ... –
@thecoon - '// समर्पित सीआईएल निर्देश 'एक अच्छा संकेत है। –