2009-08-11 4 views
5

मैं बिना किसी समझ के कोड लिख रहा हूं कि मैं स्थिर विधियों के भीतर निरंतर मानों तक पहुंच क्यों प्राप्त कर सकता हूं।
एक स्थैतिक विधि के भीतर एक कॉन्स वैरिएबल क्यों उपलब्ध है?

मानों को static के रूप में घोषित किए बिना क्यों पहुंचना संभव है?

जैसे) यह कॉल करने के लिए IMAGE_FILE_EXTENSIONAddImageToDocument(...) भीतर

public abstract class ImageDocumentReplacer : DocumentReplacer 
{ 
    private const string IMAGE_FILE_EXTENSION = ".tif"; 

    private static void AddImageToDocument(int documentId, string separatedPath) 
    { 
     Console.WriteLine(IMAGE_FILE_EXTENSION); 
    } 
} 

उत्तर

17

const सदस्यों परोक्ष static हैं कानूनी है। वे एक विशिष्ट उदाहरण के बजाय कक्षा से संबंधित हैं। नतीजतन, आप this.myConstant लेकिन MyClass.myConstant का उपयोग नहीं कर सकते हैं।

सी # 3.0 विनिर्देश (अनुभाग §10.4 स्थिरांक) का हवाला देते हुए:

हालांकि स्थिरांक static सदस्यों माना जाता है, एक निरंतर घोषणान की आवश्यकता है और न ही एक static संशोधक अनुमति देता है। निरंतर घोषणा में एक ही संशोधक के लिए यह कई बार प्रकट होता है।

+2

बस जोड़ना: स्थिर स्थिरांक का उपयोग करने का प्रयास करें, और आपका संकलक शायद शिकायत करेगा;) –

+0

@ सैमुएल: हाँ, यह हैरी! – Sung

+0

मैंने कभी भी * स्थिर * स्थिर होने के बारे में सोचा नहीं ... धन्यवाद Mehrdad। – Sung

1

मैं उम्मीद करता हूं कि स्थिरता उदाहरण-से-उदाहरण को बदल नहीं सकती है, जिससे उन्हें स्थिर विधि से एक्सेस करने में सुरक्षित बना दिया जाता है।

2

यह क्यों संभव नहीं होना चाहिए? चूंकि मान संकलन समय पर तय किया गया है, इसलिए कोई संभावित असंगतता नहीं है (क्योंकि चर के साथ होगा या readonly फ़ील्ड जिन्हें रनटाइम पर विभिन्न उदाहरणों के लिए अलग-अलग मानों के लिए प्रारंभ किया जा सकता है)

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