2010-01-07 20 views
19

सी # को ऑपरेटर ओवरलोड को सदस्य कार्यों (जैसे सी ++) के बजाय स्थिर तरीकों के लिए क्यों आवश्यक है? (शायद अधिक विशेष रूप से: इस निर्णय के लिए डिजाइन प्रेरणा क्या थी?)क्यों सी # ऑपरेटर अधिभार स्थिर होना चाहिए?

+0

सी ++ ऑपरेटरों को मुक्त (यानी गैर सदस्य) कार्यों को अनुमति देता है। लेकिन सी # ने नि: शुल्क कार्यों पर स्टालिनियन प्रतिबंध लगाने का फैसला किया, इसलिए आपको वहां स्थिर रखना होगा। –

उत्तर

26

this post पर एक नज़र डालें।

कुछ कारण, प्राथमिक ऑपरेटर समरूपता को संरक्षित करने के लिए प्रतीत होता है (जैसे बाइनरी ऑपरेशन के बाएं हाथ की ओर विशेष उपचार नहीं मिलता है, क्योंकि ऑपरेशन भेजने के लिए जिम्मेदार होता है)।

30

कष्टदायी विस्तार यहाँ में उत्तर दिया:

http://blogs.msdn.com/ericlippert/archive/2007/05/14/why-are-overloaded-operators-always-static-in-c.aspx

भी मूल्य प्रकार और उदाहरण ऑपरेटरों के बारे में एक और सूक्ष्म बिंदु है। स्टेटिक ऑपरेटर इस तरह के कोड को संभव बनाते हैं:

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; 

तो आप ऑपरेटर को आह्वान कर सकते हैं, भले ही संदर्भ शून्य है। यह इंस्टेंस ऑपरेटरों के लिए मामला नहीं होगा।

+0

@Sapph को हरे रंग की जांच देने वाला है क्योंकि आपको अधिक प्रतिनिधि मिल गया है :) – dkackman

+0

lol मैंने प्रतिनिधि को एक दूसरे की तरह देखा और फिर नीचे देखा। अच्छी तरह से योग्य, सैफ ने जवाब में और प्रयास किया। उत्कृष्ट कोड स्निपेट के लिए –

+3

+1: डी – Sapph

0

शायद यह सोचने के लिए सबसे अच्छा तरीका क्यों विधियों को स्थिर नहीं होना चाहिए। राज्य की कोई आवश्यकता नहीं है और इसलिए यह।

+0

कोई राज्य लाभ नहीं हो सकता है लेकिन वर्चुअल ऑपरेटर ओवरलोडिंग अच्छा होगा। राज्य की बात यह नहीं है कि यह सी # में क्यों उपलब्ध नहीं है। –

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