Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C#

C# में const और readonly कीवर्ड के बीच अंतर समझाएं


C# में, const और readonly दोनों कीवर्ड अपरिवर्तनीय मानों को परिभाषित करने के लिए उपयोग किए जाते हैं जिन्हें घोषित होने के बाद संशोधित नहीं किया जा सकता। हालांकि, दोनों के बीच कुछ महत्वपूर्ण अंतर हैं।

const

const मॉडिफायर उन स्थिर मानों की घोषणा करता है जो कंपाइल-टाइम पर ज्ञात होते हैं और नहीं बदलते, यानी वे अपरिवर्तनीय हैं। C# में, आप केवल बिल्ट-इन प्रकारों को const के रूप में चिह्नित कर सकते हैं। उपयोगकर्ता-परिभाषित प्रकार जैसे क्लासेस, स्ट्रक्स आदि const नहीं हो सकते। साथ ही, क्लास सदस्य प्रकार जैसे मेथड्स, प्रॉपर्टीज, या इवेंट्स को स्थिरांक के रूप में चिह्नित नहीं किया जा सकता।

आपको घोषणा के दौरान स्थिरांक को आरंभ करना होगा।

class Period{    public const int hours = 12;    public const int minutes = 60; }

स्थिरांकों को किसी भी विजिबिलिटी मॉडिफायर के साथ चिह्नित किया जा सकता है, यानी private, public, protected, protected internal, या private protected।

स्थिरांक स्थिर मानों के रूप में भी कार्य करते हैं, यानी स्थिरांक का मान क्लास के सभी इंस्टेंस के लिए समान होता है। आपको उन्हें static कीवर्ड के साथ स्पष्ट रूप से चिह्नित करने की आवश्यकता नहीं है। आप क्लास के इंस्टेंस वेरिएबल्स का उपयोग करके स्थिरांक तक नहीं पहुंच सकते बल्कि क्लास नाम का उपयोग करना होगा।

readonly

readonly के रूप में चिह्नित एक फ़ील्ड को केवल घोषणा के दौरान या कंस्ट्रक्टर में असाइन किया जा सकता है। एक बार क्लास का इंस्टेंस बन जाने के बाद, आप readonly फ़ील्ड को संशोधित नहीं कर सकते।

यदि फ़ील्ड एक मूल्य प्रकार है, तो इसे readonly चिह्नित करने से यह अपरिवर्तनीय हो जाता है। दूसरी ओर, यदि एक readonly फ़ील्ड एक संदर्भ प्रकार है, तो आप उस ऑब्जेक्ट के डेटा को बदल सकते हैं जिसे वेरिएबल संदर्भित करता है। हालांकि, आप उस संदर्भ को किसी नए ऑब्जेक्ट पर इंगित करने के लिए नहीं बदल सकते।

class Person{    private readonly string _title;    private readonly string _skill;    public Person(string title, string skill){       _title = title;       _skill = skill;    } }

एक readonly फ़ील्ड को फ़ील्ड घोषणा में और किसी भी कंस्ट्रक्टर में कई बार असाइन किया जा सकता है। साथ ही, उपयोग किए गए कंस्ट्रक्टर के आधार पर इसके अलग-अलग मान हो सकते हैं।

दोनों के बीच एक महत्वपूर्ण अंतर यह है कि जब एक असेंबली में घोषित const या readonly फ़ील्ड को दूसरी असेंबली में उपयोग किए जाने पर कंपाइल किया जाता है।

  • const मान के मामले में, यह फाइंड-रिप्लेस जैसा है। स्थिरांक मान दूसरी असेंबली की इंटरमीडिएट लैंग्वेज में 'बेक' हो जाता है। इसका मतलब है कि यदि आप स्थिरांक को अपडेट करते हैं, तो दूसरी असेंबली में तब तक पहला मान रहेगा जब तक आप उसे पुनः कंपाइल नहीं करते।

  • readonly मान के मामले में, यह मेमोरी लोकेशन का संदर्भ जैसा है। मान दूसरी असेंबली की इंटरमीडिएट लैंग्वेज में बेक नहीं होता। इसका मतलब है कि यदि मेमोरी लोकेशन अपडेट होता है, तो दूसरी असेंबली को पुनर्कंपाइल के बिना नया मान मिल जाता है। readonly फ़ील्ड को अपडेट करने का मतलब है कि केवल पहली असेंबली को कंपाइल करने की आवश्यकता है बिना किसी यूजर असेंबली को कंपाइल किए।

उदाहरण

using System; class Program{    static void Main(){       Console.WriteLine(Period.HOURS);       var person = new Person("John", "Programmer");       person.Print();    } } class Period{    public const int HOURS = 12;    public const int MINUTES = 60; } class Person{    private readonly string _title;    private readonly string _skill;    public Person(string title, string skill){       _title = title;       _skill = skill;    }    public void Change(string skill){       // Error: A readonly field cannot be assigned to       // this._skill = skill;    }    public void Print(){       Console.WriteLine($"{_title}: {_skill}");    } }

आउटपुट

12 John: Programmer
  1. C++ में const int*, const int * const, और int const * में क्या अंतर है? C++ में const int*, const int * const, और int const * में क्या अंतर है?

    यहां हम पूर्णांक पॉइंटर्स, पूर्णांक स्थिरांक और पूर्णांक स्थिरांक पॉइंटर्स के आधार पर वेरिएबल घोषणा के कुछ अलग प्रकार देखेंगे। उन्हें निर्धारित करने के लिए हम क्लॉकवाइज/स्पाइरल नियम का उपयोग करेंगे। शर्तों पर चर्चा करके, हम नियमों को भी समझ सकते हैं। const int *. यह कंपाइलर को बताने के लिए उपयोग कि

  1. - C# में इंटरफ़ेस और क्लास में क्या अंतर है?

    एक इंटरफ़ेस फील्ड्स या मेथड कार्यान्वयन के बिना एक क्लास है। यह उन मेथड्स को लागू नहीं कर सकता जो यह परिभाषित करता है।एक क्लास आमतौर पर इंटरफ़ेस में परिभाषित मेथड्स को लागू करती है।इंटरफ़ेसइंटरफ़ेस प्रॉपर्टीज, मेथड्स, और इवेंट्स को परिभाषित करते हैं, जो इंटरफ़ेस के सदस्य हैं। इंटरफ़ेस में केवल सदस्य

  1. - C# में String और string में क्या अंतर है?

    String का मतलब System.String है जबकि string C# में System.String के लिए एक एलियास (alias) है।उदाहरण के लिए:string str = Welcome!;यह आवश्यक नहीं है, लेकिन आमतौर पर String का उपयोग तब किया जाता है जब आप क्लासेस के साथ काम करते हैं।string str = String.Format(Welcome! {0}!, user);चूंकि string System.Str