संभव डुप्लिकेट:
“const correctness” in C#चर और विधियों के लिए 'const' के साथ डिज़ाइन नहीं किया गया था?
मुझे लगता है const
सामान्य भाषा सादगी के लिए सी # कल्पना के लिए सरल बनाया गया था। क्या कोई विशिष्ट कारण है कि हम परिवर्तनीय संदर्भ या विधियों को const
के रूप में घोषित नहीं कर सकते जैसे हम सी ++ के साथ कर सकते हैं? उदाहरण:
const MyObject o = new MyObject(); // Want const cast referenece of MyObject
o.SomeMethod(); // Theoretically legal because SomeMethod is const
o.ChangeStuff(); // Theoretically illegal because ChangeStuff is not const
class MyObject
{
public int val = 0;
public void SomeMethod() const
{
// Do stuff, but can't mutate due to const declaration.
}
public void ChangeStuff()
{
// Code mutates this instance. Can't call with const reference.
val++;
}
}
आपका मतलब है, "सी ++ - शैली 'const'ness के पास दूर-दराज के प्रभाव हैं जो सही करने के लिए वास्तव में कठिन हैं (एक डिजाइन और कार्यान्वयन पीओवी दोनों से) और जिसके लिए कोई रनटाइम समर्थन नहीं है"? यह एक उपयोगी, लेकिन वास्तव में महंगा सुविधा है। एफडब्ल्यूआईडब्ल्यू, एफ # विपरीत दृष्टिकोण लेता है: * कुछ भी नहीं * जब तक घोषित नहीं किया जाता है। हालांकि, ढांचे के साथ बातचीत गैर-स्पष्ट हो सकती है। –
मैं असहमत हूं कि यह एक सटीक डुप्लिकेट है। पुराना सवाल यह पूछता है कि कोड में इसे कैसे कार्यान्वित किया जाए। @ स्पॉल्सन पूछता है कि यह कंपाइलर में क्यों नहीं है। –
कॉन्स शुद्धता को सार्थक होने के लिए लागू करने की आवश्यकता है। यह तब मुश्किल हो जाता है जब कोई .NET सक्षम भाषा किसी अन्य भाषा द्वारा बनाए गए प्रकारों का उपभोग कर सकती है। उनमें से सौ के करीब शायद हैं। इन सभी भाषाओं के वाक्यविन्यास को घोषित करने के लिए संशोधित कॉन्स विशेषताओं और उनके कंपाइलर्स को समायोजित करने के लिए संशोधित किया जाना चाहिए। दूसरे शब्दों में, दृढ़ता सहीता गैर-सीएलएस अनुपालन है। –