सी # 4, कॉलर्स को COM इंटरफ़ेस को रेफ पैरामीटर द्वारा तर्क के सामने रेफरी कीवर्ड को छोड़ने की अनुमति दें।सी # कंपाइलर बग या सामान्य COM विषमता? COM इंटरऑप को सरल बनाने के लिए
मुझे आज यह देखकर आश्चर्य हुआ कि यह COM इंटरफेस को विस्तारित करने वाले एक्सटेंशन विधियों पर भी लागू होता है। निम्नलिखित देखें, संकलित करें, कोड:
using System;
using System.Runtime.InteropServices;
[ComImport, Guid ("cb4ac859-0589-483e-934d-b27845d5fe74")]
interface IFoo {
}
static class Program {
public static void Bar (this IFoo self, ref Guid id)
{
id = Guid.NewGuid();
}
static void Main()
{
Foo (null);
}
static void Foo (IFoo o)
{
Guid g = Guid.NewGuid();
Console.WriteLine (g);
// note that g is passed as is, and not as ref g
o.Bar (g);
Console.WriteLine (g);
}
}
मुझे इस व्यवहार को समझाने के लिए कल्पना में कुछ भी नहीं मिला।
मेरी भावना COM इंटरफ़ेस के बाहर कोड होगा, भले ही यह एक COM इंटरफ़ेस को विस्तारित करने वाली एक विस्तार विधि है, नियमित सी # नियमों का पालन करना चाहिए, और रेफरी कीवर्ड के उपयोग को लागू करना चाहिए। इसलिए मैंने bug on connect दायर किया। ऐसा नहीं है कि मुझे लगता है कि यह तय किया जाएगा, भले ही इसे एक बग के रूप में माना जाता है, फिर भी इस पर भरोसा करने वाला कोड पहले से ही है।
बग? एक बग नहीं है?
बहुत दिलचस्प। 4.0 spec यहां संदिग्ध प्रतीत होता है।यह कहता है कि यह एक COM प्रकार (धारा 22 + 22.1) के तरीकों पर लागू होता है। लेकिन मुझे कुछ भी नहीं मिला जो स्पष्ट रूप से कहता है या नहीं कहता कि एक विस्तार विधि को इस तरह से एक प्रकार का हिस्सा माना जाता है। मेरा अनुमान है कि यह एक बग है। मुझे यकीन है कि एरिक जल्द ही स्पष्टीकरण के साथ होगा। – JaredPar
यह सुनिश्चित है कि एक बग की तरह लगता है। बर्फ पर ठंडी बारिश के कारण आज भी मेरी बस चल रही नहीं है, और इसलिए मैं कार्यालय से दूर हूं। मैं अगले हफ्ते इसे देख लूंगा। कनेक्ट पर समस्या दर्ज करने के लिए धन्यवाद! –