C # में कंपाउंड असाइनमेंट ऑपरेटर को ओवरलोड करना क्यों संभव नहीं है?


11

शीर्षक भ्रामक है, इसलिए कृपया संपूर्ण प्रश्न :-) पढ़ें

"कम्पाउंड असाइनमेंट ऑपरेटर" द्वारा मुझे इस तरह के निर्माण का ध्यान रखना है op=, उदाहरण के लिए +=। शुद्ध असाइनमेंट ऑपरेटर ( =) मेरे प्रश्न से संबंधित नहीं है।

"क्यों" से मेरा मतलब एक राय नहीं है, लेकिन संसाधन (पुस्तक, लेख, आदि) जब कुछ डिजाइनर, या उनके सहकर्मी, आदि अपने तर्क (यानी डिजाइन पसंद का स्रोत) व्यक्त करते हैं ।

मैं सी ++ और सी # में पाया विषमता से हैरान हूं ( हाँ, मुझे पता है कि सी # सी + + 2.0 नहीं है ) - सी ++ में आप ऑपरेटर को अधिभारित करेंगे +=और फिर +पहले से परिभाषित ऑपरेटर पर भरोसा करते हुए लगभग स्वचालित रूप से उपयुक्त ऑपरेटर लिखेंगे । C # में यह उल्टा है - आप अधिक भार लेते हैं +और +=आपके लिए संश्लेषित होते हैं।

यदि मैं गलत नहीं हूँ तो बाद का दृष्टिकोण वास्तविक के मामले में अनुकूलन के लिए एक मौका को मारता है +=, क्योंकि नई वस्तु का निर्माण किया जाना है। इसलिए इस तरह के दृष्टिकोण का कुछ बड़ा फायदा होना चाहिए, लेकिन MSDN इसके बारे में बताने में बहुत शर्मिंदा है।

और मुझे आश्चर्य है कि वह लाभ क्या है - इसलिए यदि आप किसी सी # पुस्तक, टेक-टॉक वीडियो, ब्लॉग प्रविष्टि में स्पष्टीकरण देते हैं, तो मैं संदर्भ के लिए आभारी रहूंगा।

निकटतम चीज़ जो मुझे मिली है वह एरिक लिपर्ट ब्लॉग पर एक टिप्पणी है कि ओवरलोड ऑपरेटरों को सी # में हमेशा स्थिर क्यों रखा जाता है? टॉम ब्राउन द्वारा। यदि स्टैटिक ओवरलोडिंग का निर्णय लिया गया था, तो यह केवल यह निर्धारित करता है कि कौन से ऑपरेटर्स को स्ट्रक्चर्स के लिए ओवरलोड किया जा सकता है। यह आगे तय करता है कि कक्षाओं के लिए अधिभार क्या हो सकता है।


3
क्या आपके पास नई C ++ शैली के लिए लिंक है? स्वाभाविक रूप से, +=पहले ओवरलोडिंग बेतुका लगता है; आप इसके हिस्सों के बजाय एक संयुक्त ऑपरेशन को क्यों अधिभारित करेंगे?
तेलेस्टिन

1
मेरा मानना ​​है कि इनके लिए शब्द "यौगिक असाइनमेंट ऑपरेटर" है।
Ixrec

2
@greenoldman Telastyn शायद यह आरोप लगा रहा था कि + के संदर्भ में + को लागू करना + आसपास के अन्य तरीकों की तुलना में अधिक प्राकृतिक लगता है, क्योंकि शब्दार्थ + = और + की रचना है। मेरे ज्ञान का सबसे अच्छा करने के लिए , + कॉल + = काफी हद तक एक अनुकूलन चाल है।
Ixrec

1
@Ixrec: कभी-कभी, एक + = b समझ में आता है, जबकि a = a + b नहीं: विचार करें कि पहचान महत्वपूर्ण हो सकती है, A को दोहराया नहीं जा सकता है, जो भी हो। कभी-कभी, a = a + b समझ में आता है, जबकि a + = b नहीं: अपरिवर्तनीय स्ट्रिंग्स पर विचार करें। इसलिए, किसी को वास्तव में यह तय करने की क्षमता की आवश्यकता होती है कि कौन सा अलग से ओवरलोड करना है। बेशक, लापता व्यक्ति को ऑटो-जेनरेट करता है, अगर सभी नेक्ससरी बिल्डिंग-ब्लॉक मौजूद हैं और यह स्पष्ट रूप से अक्षम नहीं है, तो यह एक अच्छा विचार है। ऐसा नहीं है कि C # उस atm, afaik को अनुमति देता है।
डिडुप्लिकेटर

4
@ग्रीनॉल्डमैन - मैं उस प्रेरणा को समझता हूं, लेकिन व्यक्तिगत रूप से, मैं *=एक संदर्भ प्रकार को शब्दार्थिक रूप से गलत करना चाहूंगा ।
तेलस्टाइन

जवाबों:


12

मुझे इसके लिए संदर्भ नहीं मिल रहा है, लेकिन मेरी समझ यह थी कि सी # टीम ऑपरेटर ओवरलोडिंग का एक उप सबसेट प्रदान करना चाहती थी। उस समय, ऑपरेटर ओवरलोडिंग में एक बुरा रैप था। लोगों ने कहा कि यह कोड को बाधित करता है, और इसका उपयोग केवल बुराई के लिए किया जा सकता है। जब तक C # डिजाइन किया जा रहा था, तब तक जावा ने हमें दिखाया था कि कोई भी ऑपरेटर ओवरलोडिंग एक तरह का कष्टप्रद नहीं था।

इसलिए C # ऑपरेटर ओवरलोडिंग को संतुलित करना चाहता था ताकि बुराई करना अधिक कठिन हो, लेकिन आप अच्छी चीजें भी बना सकते हैं। असाइनमेंट के शब्दार्थ को बदलना उन चीजों में से एक था जिन्हें हमेशा बुराई माना जाता था। अनुमति देने +=और उसके परिजनों को अतिभारित होने से, वह उस तरह की अनुमति देगा। उदाहरण के लिए, यदि +=एक नया बनाने के बजाय संदर्भ को उत्परिवर्तित किया जाता है , तो यह अपेक्षित शब्दार्थों का पालन नहीं करेगा, जो कि कीड़े के लिए अग्रणी होगा।


धन्यवाद, अगर आपको कोई आपत्ति नहीं है तो मैं इस सवाल को थोड़ा और खुला रखूंगा, और अगर कोई आपको वास्तविक डिजाइन के तर्क से नहीं हराता है, तो मैं इसे स्वीकार करने के साथ बंद कर दूंगा। एक बार फिर आपका धन्यवाद।
ग्रीनल्डमैन

@ग्रीनॉल्डमैन - साथ ही आपको चाहिए। मुझे यह भी उम्मीद है कि कोई और अधिक ठोस संदर्भों के साथ उत्तर देगा।
तेलेस्टिन

तो, यह एक ऐसी जगह है जहां पॉइंटर और पॉइंटर दोनों के बारे में बात करने की असंभवता आराम से और स्पष्ट रूप से यह प्रमुख है? बहुत शर्म की बात हैं।
Deduplicator

"लोगों ने जोर देकर कहा कि यह कोड को बाधित करता है" - हालांकि यह अभी भी सच है, क्या आपने एफ # पुस्तकालयों में से कुछ को देखा है? संचालक का शोर। जैसे quanttec.com/fparsec
Den
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.