क्या यह एक सीएलआर प्रतिबंध या भाषा डिजाइन निर्णय है? मैं सी में यह करने की कोशिश की ++/CLI, ज़ाहिर है, जहां यह काम करता है क्योंकि देशी C++ समर्थन करने के लिए जरूरत की:संदर्भ द्वारा पास के साथ सी # समर्थन ऑपरेटर ओवरलोडिंग क्यों नहीं करता है?
public ref class Test
{
public:
static Test^ operator &(Test^ msg, int& i)
{
i = i + 1;
return nullptr;
}
};
और फिर संकलक छोड़े गए उत्पादन को देखा:
public: static Test __gc* op_BitwiseAnd(Test __gc* msg, Int32 __gc** modopt(IsImplicitlyDereferenced __gc*) i)
{
i[0] += 1;
return 0;
}
मैं आगे चला गया और सी # परियोजना से इस ऑपरेटर कॉल करने की कोशिश - और निश्चित रूप से मैं [असुरक्षित] यह करने के लिए (मैं जरूरत सूचक) जाने के लिए की जरूरत:
Test t = new Test();
int i = 0;
unsafe
{
t = t & &i;
}
जाहिर नहीं इतनी मेहनत CLR के लिए लागू करने के लिए? मैं वास्तव में ऑपरेटर ओवरलोडिंग में संदर्भ से गुजरता हूं और कम से कम खुद को प्रकाश में रखना चाहता हूं कि यह क्यों गुम है?
हमारे ऑपरेटर ओवरलोड में संदर्भ चर के साथ निपटने की आवश्यकता होने पर सी # असुरक्षित और पॉइंटर्स के पीछे कुरूपता क्यों नहीं छिपा सकता है? यहां तक कि अगर मैंने इस बदसूरत कामकाज के साथ जाना चुना है, तो यह सिल्वरलाइट में काम नहीं करेगा, जहां असुरक्षित संचालन की अनुमति नहीं है ...
बिलकुल नहीं। रेफ पैरामीटर लेने के लिए बस ऑपरेटर ओवरलोडिंग करें? –
इवान: फिर आप ओवरलोडेड ऑपरेटर को कैसे कॉल करेंगे? यदि कोई विधि 'रेफरी पैरामीटर' लेती है, तो कॉल साइट ** और ** परिभाषा साइट ** स्पष्ट रूप से ** पैरामीटर को 'रेफरी' घोषित करनी चाहिए। –
मेहदाद: यह बिल्कुल ठीक है। उनके पास अलग-अलग हस्ताक्षर हैं, इसलिए बिना रेफरी के कॉलिंग कभी भी एक रिफॉर्म अधिभार से मेल नहीं खाती। इसके बारे में इतना जटिल क्या है, जिसने सी # टीम को इसे लागू नहीं किया? क्या होगा यदि मुझे वास्तव में एक ऑपरेंड को बदलने की आवश्यकता है जो एक संदर्भ प्रकार नहीं है - मैं इसे कैसे कर सकता हूं? –