जैसा कि जॉन पहले से ही कवर किया गया है (बेशक) कॉन्स शुद्धता उतनी आसान नहीं है जितनी दिखाई दे सकती है। सी ++ यह एक तरीका है। डी यह एक और (तर्कसंगत रूप से अधिक सही/उपयोगी) तरीका करता है। सी # इसके साथ फ्लर्ट करता है लेकिन कुछ और साहसी नहीं करता है, जैसा कि आपने पाया है (और शायद कभी भी अच्छा नहीं है, क्योंकि जॉन अच्छी तरह से फिर से ढंका हुआ है)।
उसने कहा, मुझे विश्वास है कि जॉन के "सैद्धांतिक कारणों" में से कई को डी मॉडल में हल किया गया है।
डी में (2.0), स्थिरांक बहुत सी ++ तरह काम करता है, सिवाय इसके कि यह पूरी तरह से संक्रामक है (ताकि स्थिरांक एक सूचक के लिए लागू वस्तु के लिए, उस वस्तु के किसी भी सदस्य ने बताया करने के लिए लागू होता है, किसी भी संकेत दिए गए कि वस्तु थी, वस्तुओं उन्होंने इत्यादि की ओर इशारा किया) - लेकिन यह स्पष्ट है कि यह केवल उस चर से लागू होता है जिसे आपने कॉन्स घोषित किया है (इसलिए यदि आपके पास पहले से ही एक गैर-कॉन्स्ट ऑब्जेक्ट है और आप इसे एक कॉन्स्ट पॉइंटर लेते हैं, तो गैर-कॉन्स्ट चर अभी भी राज्य को बदलो)।
डी एक और कीवर्ड - invariant प्रस्तुत करता है - जो ऑब्जेक्ट पर ही लागू होता है। इसका मतलब यह है कि शुरू होने के बाद कभी भी राज्य को कुछ भी नहीं बदल सकता है।
इस व्यवस्था की सुंदरता यह है कि एक कॉन्स विधि दोनों कॉन्स्ट और इनवेंटरी ऑब्जेक्ट्स को स्वीकार कर सकती है। चूंकि अपरिवर्तनीय वस्तुओं रोटी और कार्यात्मक दुनिया के मक्खन, और स्थिरांक तरीका है के रूप में "शुद्ध" कार्यात्मक अर्थ में चिह्नित किया जा सकता - हालांकि यह अस्थायी वस्तुओं के साथ इस्तेमाल किया जा सकता है।
ट्रैक पर वापस हो रही है - मुझे लगता है कि यह मामला है कि हम केवल अब (naughties के उत्तरार्ध) कैसे स्थिरांक (और अपरिवर्तनीय) का उपयोग करने के लिए सबसे अच्छा समझने रहे है। नेट मूल रूप से परिभाषित किया गया था जब चीजें अधिक खतरनाक थीं, इसलिए बहुत अधिक प्रतिबद्ध नहीं था - और अब इसे पुनः निकालने में बहुत देर हो चुकी है।
मैं नेट वी एम पर डी रन की एक बंदरगाह को देखने के लिए अच्छा लगेगा, हालांकि :-)
धन्यवाद जॉन। यह रोशनी है। –