किसी कारण से, मैंने हमेशा यह माना है कि readonly
फ़ील्ड्स उनके साथ जुड़े हुए हैं, जिसे मैंने सीएलआर के रूप में सोचा था कि readonly
फ़ील्ड प्रारंभ किया गया है या नहीं। यहां का ओवरहेड राज्य का ट्रैक रखने के लिए कुछ अतिरिक्त मेमोरी उपयोग होगा और मूल्य निर्दिष्ट करते समय चेक होगा।क्या कोई रन-टाइम ओवरहेड पढ़ने के लिए है?
शायद मुझे यह माना गया क्योंकि मुझे नहीं पता था कि readonly
फ़ील्ड केवल एक कन्स्ट्रक्टर के अंदर या फील्ड घोषणा के भीतर ही शुरू किया जा सकता है और रन-टाइम चेक के बिना, आप यह गारंटी नहीं दे पाएंगे कि इसे असाइन नहीं किया जा रहा है विभिन्न तरीकों से कई बार। लेकिन अब मुझे यह पता है, इसे आसानी से सी # कंपाइलर द्वारा स्थिर रूप से चेक किया जा सकता है, है ना? तो क्या यह मामला है?
एक अन्य कारण यह है कि मैंने पढ़ा है कि readonly
के उपयोग में 'मामूली' प्रदर्शन प्रभाव है, लेकिन वे इस दावे में कभी नहीं गए और मुझे इस विषय पर जानकारी नहीं मिल रही है, इसलिए मेरा प्रश्न। मुझे नहीं पता कि रन-टाइम चेक से अलग प्रदर्शन प्रदर्शन क्या हो सकता है।
एक तीसरा कारण मैंने देखा कि कि readonly
initonly
के रूप में संकलित आईएल में संरक्षित है है, इसलिए के लिए इस जानकारी आईएल में होना है, तो readonly
कि क्षेत्र सी # संकलक द्वारा एक गारंटी से ज्यादा कुछ नहीं है क्या कारण है कभी कन्स्ट्रक्टर या घोषणा के बाहर असाइन नहीं किया जाता है?
दूसरी तरफ, मुझे पता चला है कि आप readonly int
के मूल्य को सीएलआर के बिना अपवाद फेंकने के प्रतिबिंब के माध्यम से प्रतिबिंबित कर सकते हैं, जो संभव नहीं होना चाहिए यदि readonly
रन-टाइम चेक था।
तो मेरा अनुमान है: 'रीडोनलिनेस' केवल एक संकलित समय सुविधा है, क्या कोई इसे पुष्टि/अस्वीकार कर सकता है? और यदि ऐसा है, तो आईएल में इस जानकारी को शामिल करने का क्या कारण है?
हूप्स, आपको वही प्रदर्शन विश्लेषण मिला जो मैंने किया था। तो आपको +1 करें और मैंने अपना (कम विस्तृत) उत्तर हटा दिया है। – Eddie
सही समझ में आता है, धन्यवाद :) – JulianR