2009-08-12 9 views
6

This MSDN article बताता है कि स्थैतिक वर्गों को मुहरबंद और अमूर्त घोषित किया जाना चाहिए। मैं इस धारणा के तहत था कि स्थिर वर्ग पहले ही बंद कर दिए गए थे। आपको एक स्थिर वर्ग को मुहरबंद घोषित करने की भी आवश्यकता क्यों होगी?सी # में स्थिर वर्गों को सीलबंद और सार के रूप में घोषित क्यों करें?

+5

वाक्य का वह भाग सी # –

+0

@ हेनकहोल्टरमैन और वीबी.नेट की तुलना में अन्य भाषाओं को स्पष्ट रूप से संदर्भित करता है, क्योंकि MustInherit और NotInheritable एक साथ उपयोग नहीं किया जा सकता है। –

उत्तर

23

मुझे लगता है कि लेख से उचित सा है:

"स्थैतिक कक्षाओं की घोषणा करो के रूप में सील और अमूर्त है, और अगर आपके प्रोग्रामिंग भाषा है करता निर्मित स्थिर कक्षाओं के लिए समर्थन नहीं एक निजी उदाहरण निर्माता, जोड़ने "

याद रखें, .NET ढांचा कई अलग-अलग भाषाओं का समर्थन करता है।

0

ऐसा लगता है कि एक वर्ग को एक निजी कन्स्ट्रक्टर के साथ मुहरबंद और अमूर्त के रूप में घोषित करना स्थिर वर्ग का विकल्प है यदि भाषा स्थैतिक वर्गों का समर्थन नहीं करती है।

16

सी # v1 कक्षा पर 'स्थैतिक' कीवर्ड की अनुमति नहीं देता था। इसलिए यदि आपके पास केवल स्थिर विधियों वाला वर्ग है, तो इसे 'मुहरबंद', 'सार' घोषित करने और कन्स्ट्रक्टर निजी बनाने का सुझाव दिया गया था। इसका मतलब है कि कोई भी आपकी कक्षा को तुरंत चालू नहीं कर सकता है या इससे प्राप्त करने का प्रयास नहीं कर सकता है। [यह उस वर्ग से प्राप्त करने के लिए समझ में नहीं आता है जिसमें केवल स्थिर विधियां हैं।]

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

11
  • abstract के रूप में कक्षा को चिह्नित करने के प्रभावों में से एक यह है कि इसे तत्काल नहीं किया जा सकता है।
  • sealed के रूप में कक्षा को चिह्नित करने के प्रभावों में से एक यह है कि विरासत में नहीं लिया जा सकता है।

यही वास्तव में static वर्ग वास्तव में है - एक वर्ग जिसे तत्काल नहीं किया जा सकता है और जिसे विरासत में नहीं लिया जा सकता है।

तो लेख यह नहीं बताता है कि आपको अपनी स्थिर कक्षाओं को abstract और sealed के रूप में चिह्नित करना चाहिए, लेकिन यह तरीका है कि आईएल में स्थिर वर्गों का प्रतिनिधित्व कैसे किया जाता है।

(अन्य भाषाओं क्योंकि एक abstract sealed वर्ग शब्दार्थ भावना का एक बहुत नहीं है, हालांकि मैं यह शक है, अगर वे एक static कीवर्ड की जरूरत नहीं है आप ऐसा करने की अनुमति कर सकते हैं।)

+0

भविष्य के यात्रियों के लिए जोड़ना चाहते हैं कि 4.0 आईएल में, स्थिर का उपयोग करके, आपको'class Private auto ansi sealed 'जैसे कुछ मिलता है। तो हाँ उसका जवाब * क्यों * है। सी # में स्थिर के साथ यह किसी भी डिफ़ॉल्ट कन्स्ट्रक्टर को हटा देता है जो आईएल में आपके लिए जेनरेट किया गया था क्योंकि सी # में इसे विरासत में नहीं मिला है। तो सी # में स्थैतिक 'पसंदीदा' है, बस उपर्युक्त उत्तरों में से कुछ को पूरा करें। – Celess

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