परिचय: शाश्वत बहस जो अपनी प्रासंगिकता नहीं खोती
\n\nएक स्थिति की कल्पना करें: आप C# में कोड लिख रहे हैं और आपको एक ऐसा मान घोषित करना है जो बदलना नहीं चाहिए। पहला विचार — const। दूसरा — static readonly। और तीसरा — "असल में, क्या अंतर है?"।
यह प्रश्न Stack Overflow पर सबसे लोकप्रिय में से एक है। नौसिखियों से लेकर वरिष्ठ डेवलपर्स तक, हज़ारों डेवलपर्स बहस करते रहते हैं कि क्या बेहतर है। और 2025 में, .NET और C# 13 के नए संस्करणों के आने के साथ, यह विकल्प और भी दिलचस्प हो गया है।
\n\nइस लेख में, हम एक बार और हमेशा के लिए समझेंगे कि const का उपयोग कब करें और static readonly का कब। आप न केवल सिद्धांत सीखेंगे, बल्कि स्पष्ट नियम भी प्राप्त करेंगे जिन्हें आप आज ही लागू कर सकते हैं।
मॉडिफायर के पीछे क्या छिपा है?
\n\nconst: कठोर स्थिरांक
\nC# में const मॉडिफायर का शाब्दिक अर्थ है "पत्थर पर खुदा हुआ" मान। यह संकलन चरण पर ज्ञात होना चाहिए। कंपाइलर स्थिरांक के मान को सीधे कोड में हर जगह डाल देता है जहाँ इसका उपयोग किया जाता है।
public class MathConstants\n{\n public const double Pi = 3.14159;\n public const int DaysInWeek = 7;\n public const string AppName = "MyApp";\n}\n\nध्यान दें: const हमेशा अंतर्निहित रूप से static होता है। आप static const नहीं लिख सकते — कंपाइलर एक त्रुटि देगा।
static readonly: लचीली अपरिवर्तनीयता
\nstatic readonly मॉडिफायर एक ऐसा फ़ील्ड है जो एक बार आरंभीकृत होता है और फिर कभी नहीं बदलता। मुख्य अंतर: मान प्रोग्राम निष्पादन के दौरान गणना किया जा सकता है।
public class AppSettings\n{\n public static readonly DateTime ReleaseDate = new DateTime(2025, 1, 15);\n public static readonly Guid InstanceId = Guid.NewGuid();\n public static readonly string ConfigPath = GetConfigPath();\n \n private static string GetConfigPath()\n {\n return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "config.json");\n }\n}\n\nमुख्य अंतर: त्वरित तुलना के लिए तालिका
\n\nआइए सब कुछ एक स्पष्ट तालिका में व्यवस्थित करें:
\n\n| विशेषता | \nconst | \nstatic readonly | \n
|---|---|---|
| आरंभीकरण का समय | \nसंकलन | \nनिष्पादन (स्थैतिक कंस्ट्रक्टर) | \n
| अनुमत प्रकार | \nकेवल आदिम (int, double, string, enum, bool) | \nकोई भी प्रकार (संदर्भ प्रकार सहित) | \n
| मेमोरी | \nमान प्रत्येक असेंबली में कॉपी किया जाता है | \nमेमोरी में एकल संदर्भ | \n
| संस्करण अनुकूलता | \nलाइब्रेरी अपडेट करने में समस्याएँ | \nसुरक्षित | \n
| प्रदर्शन | \nअधिकतम (संकलन चरण पर प्रतिस्थापन) | \nपहली पहुँच पर थोड़ा ओवरहेड | \n
const कब चुनें?
\n\nconst का उपयोग करें जब:
- \n
- मान बिल्कुल अपरिवर्तनीय है — गणितीय स्थिरांक (π, e), सप्ताह में दिनों की संख्या, भौतिक स्थिरांक। \n
- मान संकलन चरण पर उपलब्ध होना चाहिए — उदाहरण के लिए, विशेषताओं, switch/case, डिफ़ॉल्ट पैरामीटर के लिए। \n
- आप पूरे कोड को नियंत्रित करते हैं — और सुनिश्चित हैं कि लाइब्रेरी को अलग से अपडेट नहीं किया जाएगा। \n
// const के लिए आदर्श\npublic class Physics\n{\n public const double SpeedOfLight = 299792458; // मी/से\n public const double GravitationalConstant = 6.67430e-11; // मी³/(किग्रा·से²)\n}\n\n// विशेषता में उपयोग —