सी # को ऑपरेटर ओवरलोड को सदस्य कार्यों (जैसे सी ++) के बजाय स्थिर तरीकों के लिए क्यों आवश्यक है? (शायद अधिक विशेष रूप से: इस निर्णय के लिए डिजाइन प्रेरणा क्या थी?)क्यों सी # ऑपरेटर अधिभार स्थिर होना चाहिए?
उत्तर
this post पर एक नज़र डालें।
कुछ कारण, प्राथमिक ऑपरेटर समरूपता को संरक्षित करने के लिए प्रतीत होता है (जैसे बाइनरी ऑपरेशन के बाएं हाथ की ओर विशेष उपचार नहीं मिलता है, क्योंकि ऑपरेशन भेजने के लिए जिम्मेदार होता है)।
कष्टदायी विस्तार यहाँ में उत्तर दिया:
भी मूल्य प्रकार और उदाहरण ऑपरेटरों के बारे में एक और सूक्ष्म बिंदु है। स्टेटिक ऑपरेटर इस तरह के कोड को संभव बनाते हैं:
class Blah {
int m_iVal;
public static Blah operator+ (Blah l, int intVal)
{
if(l == null)
l = new Blah();
l.m_iVal += intVal;
return l;
}
}
//main
Blah b = null;
b = b + 5;
तो आप ऑपरेटर को आह्वान कर सकते हैं, भले ही संदर्भ शून्य है। यह इंस्टेंस ऑपरेटरों के लिए मामला नहीं होगा।
शायद यह सोचने के लिए सबसे अच्छा तरीका क्यों विधियों को स्थिर नहीं होना चाहिए। राज्य की कोई आवश्यकता नहीं है और इसलिए यह।
कोई राज्य लाभ नहीं हो सकता है लेकिन वर्चुअल ऑपरेटर ओवरलोडिंग अच्छा होगा। राज्य की बात यह नहीं है कि यह सी # में क्यों उपलब्ध नहीं है। –
सी ++ ऑपरेटरों को मुक्त (यानी गैर सदस्य) कार्यों को अनुमति देता है। लेकिन सी # ने नि: शुल्क कार्यों पर स्टालिनियन प्रतिबंध लगाने का फैसला किया, इसलिए आपको वहां स्थिर रखना होगा। –