2010-09-26 18 views
34

सी ++ में, आप तो जैसे एक निरंतर विधि को परिभाषित कर सकते हैं:कॉन्स्ट तरीकों

int func_that_does_not_modify_this(int arg) const {} 

समारोह के अंत में const रखने अगर आप गलती से आंतरिक गुण के किसी भी संशोधित करने से रोकता है, और फोन करने वाले को पता है की सुविधा देता है कि यह फ़ंक्शन ऑब्जेक्ट को संशोधित नहीं करेगा।

क्या सी # में इस तरह की एक अवधारणा है?

उत्तर

42

नहीं, सी # में ऐसा कुछ भी नहीं है। यह बहुत कुछ के बारे में बात की गई है, लेकिन इस तरह से कॉन्स काम करना मुश्किल है कि यह संकलन समय पर सत्यापित हो सकता है, इसे सी ++ में दूर नहीं किया जा सकता है, और वास्तव में के बिना वास्तव में उपयोग करने के लिए अभी भी आसान है जब वे अपनी कक्षाएं तैयार करते हैं तो इसे पूरी तरह सही करने के लिए।

बेशक, यदि आप अपने स्वयं के प्रकार अपरिवर्तनीय (जैसे string) डिजाइन करते हैं तो इसके सभी उदाहरण विधियां प्रभावी रूप से स्थिर होती हैं। यह हमेशा व्यावहारिक नहीं है, लेकिन यह उचित जगह का उपयोग करने के लिए एक महत्वपूर्ण तकनीक है।

8

नहीं। सी # में कुछ भी समान नहीं है।

कोई const & या तो।

जैसा कि जॉन बताता है कि आप स्पष्ट रूप से एक कॉन्स विधि को कार्यान्वित कर सकते हैं, लेकिन कॉलर को यह जानने के लिए दस्तावेज से परे कोई रास्ता नहीं है कि एक विधि है।

11

Code Contract भविष्य में ऐसी सुविधा प्रदान करनी चाहिए। वर्तमान में, आप [Pure] के रूप में एक विधि को चिह्नित कर सकते हैं, जिसका अर्थ है कि इसका कोई दुष्प्रभाव नहीं है (यानी किसी भी वर्ग के सदस्यों को संशोधित नहीं करता है)। दुर्भाग्यवश, टूल का वर्तमान संस्करण इस नियम को लागू नहीं करता है, इसलिए उस विशेषता का उपयोग केवल दस्तावेज़ीकरण उद्देश्य के लिए है। मुझे पूरा यकीन है कि भविष्य के संस्करण में, इसे स्थैतिक-विश्लेषण (यानी संकलन-समय पर) के माध्यम से लागू किया जाएगा, या कम से कम यह दस्तावेज संकेत देता है।

संबंधित SO प्रश्न: Pure functions in C#

+0

यह अच्छा होगा :) – mpen

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