2012-07-04 28 views
7

आज मैं एक लेख है, जहां एक const क्षेत्र संकलन समय निरंतर एक readonly क्षेत्र कहा जाता है, जबकि क्रम निरंतर कहा जाता है पाया। दो वाक्यांश "प्रभावी सी #" से आते हैं। मैं MSDN और भाषा कल्पना में, कुछ भी नहीं के बारे में क्रम निरंतर लगता है की खोज।स्थिरांक बनाम केवल पढ़ने के लिए

कोई आक्रामक नहीं है लेकिन मुझे नहीं लगता कि रनटाइम स्थिर एक उचित वाक्यांश है।

private readonly string foo = "bar"; 

"foo" नामक एक चर, जिसका मूल्य "बार" है बनाता है, और मूल्य यह एक चर, constant पर कोई व्यवसाय है, यहाँ केवल पढ़ने के लिए है। एक पठनीय चर अभी भी एक चर है, यह स्थिर नहीं हो सकता है। परिवर्तनीय और स्थिर पारस्परिक रूप से अनन्य हैं।

हो सकता है कि इस सवाल का पानी में गिर जाता है, फिर भी मैं दूसरों की राय को सुनने के लिए चाहते हैं। तुम क्या सोचते हो?

+4

'readonly' का नाम है' का अर्थ है। इसे 'अपरिवर्तनीय' कहा जाना चाहिए था। – leppie

+1

मैं मानता हूं कि यह पुस्तक में शब्दावली का एक अच्छा विकल्प नहीं है। हालांकि, यह सवाल SO के लिए अच्छा नहीं है क्योंकि वास्तविक समस्याओं के आधार पर व्यावहारिक, उत्तरदायी प्रश्न हैं। चैटी, ओपन-एंडेड प्रश्न हमारी साइट की उपयोगिता को कम करते हैं और सामने वाले पृष्ठ ' –

+0

से अन्य प्रश्नों को धक्का देते हैं, यह एक "स्थिर" है जिसमें यह एक मान है जो नहीं बदलता और बदल नहीं सकता (प्रतिबिंबित)। यह सी # विनिर्देश शब्दावली में निरंतर अभिव्यक्ति नहीं है, लेकिन मुझे नहीं लगता कि यह किसी पुस्तक में वर्णित होने पर एक समस्या है। यह वास्तव में ऐसा नहीं लगता है कि आपके पास * प्रोग्रामिंग * प्रश्न है ... –

उत्तर

6

आप अपने आप को ध्यान दें के रूप में, उस शब्द के भाषा विनिर्देश आदि तो में उपयोग नहीं किया जाता है; उस किताब को दोष दें! मैं, यह एक "केवल पढ़ने के लिए क्षेत्र" कहते हैं क्योंकि यह है कि यह क्या है होगा - जहां की "केवल पढ़ने के लिए" यहाँ परिभाषा प्रारंभकर्ता/निर्माता से संबंधित है, और नियमित कोड तक सीमित है। उदाहरण के लिए, यहां तक ​​कि केवल पढ़ने के लिए फ़ील्ड अस्थिर रहे हैं ...

// how to annoy your colleagues... 
typeof(string).GetField("Empty").SetValue(null, " "); 

(ध्यान दें, यह नहीं रह गया है हाल ही में CLR संस्करणों पर काम करता है - JIT शायद एक ldstr के साथ मैदान-लोड की जगह - लेकिन यह वास्तव में एक बहुत लंबे समय के लिए किया था समय)

(अधिक वास्तविक कारणों वस्तुओं पर यह करने के लिए अक्रमांकन से संबंधित)

+0

में भी इस्तेमाल किया जाता है, मैंने कभी इसे "**** स्थिर" नहीं कहा, ठीक है ... पुस्तक को दोष दें! –

+3

@ डैनी जब मैं कहता हूं "पुस्तक को दोष दें", मुझे लगता है कि जॉन का मुद्दा एक अच्छा है; शायद यह स्पष्ट नहीं कर रहा है जब यह * ट्रायलिंग उदाहरण के लिए * वर्णनात्मक * शब्दावली –

+0

+1 के बजाय * वर्णनात्मक * –

1

एक केवल पढ़ने के लिए चर केवल अपने निर्माता में बदला जा सकता है और जटिल वस्तुओं पर इस्तेमाल किया जा सकता है। एक निरंतर चर को रनटाइम पर बदला नहीं जा सकता है, लेकिन केवल सरल प्रकार जैसे इंट, डबल, स्ट्रिंग पर उपयोग किया जा सकता है। क्रम निरंतर कुछ हद तक सही है, लेकिन इस मुद्दे को confuses, वहाँ एक स्थिर और एक केवल पढ़ने के लिए, और इसलिए एक-दूसरे से मिलते-जुलते नामकरण के बीच बहुत स्पष्ट मतभेद हैं शायद एक अच्छा विचार है, भले ही अक्सर वे एक ही उद्देश्य के लिए उपयोग किया जाता है नहीं है।

मतभेद here

2

मैं केवल पढ़ने के लिए एक "एक बार चर लिखना", जो रनटाइम पर नहीं संकलक द्वारा जाँच की है, कहेंगे की एक त्वरित सारांश। आप प्रतिबिंब का उपयोग करके फ़ील्ड लिख सकते हैं, इसलिए यह रनटाइम पर स्थिर नहीं है।

+0

रनटाइम पर एक रीडोनली चर नहीं है, संकलन समय पर नहीं? –

+0

नहीं, इसे रनटाइम पर लिखा जा सकता है। यह serializers, NHibernate आदि द्वारा किया जाता है –

+7

"एक बार लिखें" भी उलझन में है; आप इसे कन्स्ट्रक्टर में 17 बार लिख सकते हैं ... –

9

मुझे विश्वास है कि लेखक का मतलब है निम्नलिखित है: उदाहरण के

पर विचार करें:

public class A { 

    public const int a = Compute();   

    private static int Compute(){ 

      /*some computation and return*/ 
      return some_computed_value; 
    } 
} 

इस, नहीं होगा संकलन, आप a को आवंटित करने के लिए निरंतर मूल्य होना चाहिए के रूप में। तो यहसंकलन-समय स्थिर का अर्थ है।

आप

public class A { 

    public readonly int a = Compute();   

    private static int Compute(){ 
      /*some computation and return*/ 
      return some_computed_value; 
    } 
} 

इस होगा संकलन के लिए इसे बदल इसके बजाय अगर। यह रनटाइम पर एक गणना करता है और इसे a पर असाइन करता है। यह रनटाइम स्थिर

+0

लेकिन यह स्थिर नहीं है, यह एक चर है ... यह बस है ... आप प्रारंभिकरण के बाद अपना मूल्य नहीं बदल सकते हैं। –

+3

@ डैनी चेन: जैसा कि अन्य ने बताया कि मुझे विश्वास है कि पुस्तक स्थिर (परिवर्तनीय नहीं) मूल्य के बारे में बात कर रही है। पहली बार संकलन समय पर ऐसा होता है, दूसरे मामले में यह रनटाइम (गणना के बाद) बन जाता है। – Tigran

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

  • कोई संबंधित समस्या नहीं^_^