2015-02-18 5 views
5

जॉन स्कीट, में गहराई में अपनी पुस्तक सी #, एक स्थिर वर्ग के बारे में कहते हैं:एक स्थिर वर्ग किस तरह से अमूर्त रूप से अमूर्त है?

यह, सार या सील के रूप में घोषित नहीं किया जा सकता है, हालांकि यह दोनों परोक्ष है।

एक सार वर्ग व्युत्पन्न प्रकारों के लिए आधार वर्ग होने के लिए है। हम केवल अपने व्युत्पन्न प्रकारों में से एक को तत्काल करके एक अमूर्त वर्ग को तुरंत चालू कर सकते हैं। दूसरी ओर, हम एक मुहरबंद वर्ग से कुछ भी प्राप्त नहीं कर सकते हैं। एक सीलबंद, अमूर्त वर्ग कई इंद्रियों में बेकार होगा। एक स्थिर वर्ग द्वारा स्कीट का अर्थ अमूर्त और मुहरबंद दोनों क्या है? क्या वह सिर्फ इसे तुरंत चालू करने में असमर्थता के बारे में बात कर रहा है?

+0

ठीक है, आप एक को तत्काल नहीं कर सकते हैं, और आप इसे अन्य कक्षाओं के लिए बेस क्लास के रूप में उपयोग नहीं कर सकते हैं। आप अपने प्रश्न में उत्तर देते हैं ... –

+2

आप एक स्थैतिक वर्ग से नहीं प्राप्त कर सकते हैं, और आप इसे तुरंत चालू नहीं कर सकते हैं। – Blorgbeard

+0

@downvoter टिप्पणी करने के लिए देखभाल? –

उत्तर

18

एक स्थिर वर्ग द्वारा स्कीट का अर्थ अमूर्त और मुहरबंद दोनों का क्या अर्थ है?

मेरा मतलब है कि यह आईएल में प्रतिनिधित्व है।

उदाहरण के लिए:

static class Foo {} 

के आईएल उत्पन्न करता है:

.class public abstract auto ansi sealed beforefieldinit Foo 
     extends [mscorlib]System.Object 
{ 
} // end of class Foo 

तो भी वह भाषा है जो स्थिर कक्षाओं के बारे में पता नहीं है कि यह से दूसरे वर्ग पाने से रोकने जाएगा, और आप को रोकने के इसे तत्काल से।

साथ ही, कि कैसे सी # विनिर्देश यह को संदर्भित करता है:

एक स्थिर वर्ग एक सील या अमूर्त संशोधक शामिल नहीं हो सकता है। नोट, हालांकि, चूंकि एक स्थैतिक वर्ग को तत्काल या व्युत्पन्न नहीं किया जा सकता है, यह व्यवहार करता है जैसे कि यह दोनों सीलबंद और अमूर्त था।

+7

मुझे लगता है कि आप शायद जानते हैं कि लेखक वास्तव में क्या मतलब था: पी – CriketerOnSO

+9

माइनस एक क्योंकि आपने किसी भी स्रोत का हवाला नहीं दिया है। संपादित करें: मैंने बस एक करके स्कोर ड्रॉप देखा और यह स्पष्ट करना चाहता हूं कि यह एक मजाक था और मैं डाउनवॉटर नहीं हूं। – adv12

+0

@ adv12, किसी ने आपकी टिप्पणी गंभीरता से ली है;) – Habib

1

यह स्पष्ट रूप से सार है क्योंकि आप कक्षा को तुरंत चालू नहीं कर सकते हैं।

यह पूरी तरह से बंद कर दिया गया है क्योंकि आप इससे प्राप्त नहीं कर सकते हैं।

5

सीआईएल में स्थैतिक कक्षाएं नहीं हैं। सीआईएल में सार वर्ग हैं, और कक्षाओं को सील कर दिया है। एक अमूर्त वर्ग को तत्काल तत्काल नहीं किया जा सकता है (हालांकि एक ठोस वर्ग एक अमूर्त वर्ग से प्राप्त हो सकता है)। एक मुहरबंद वर्ग से नहीं लिया जा सकता है। उनको संयोजित करें, और आपके पास कुछ ऐसा है जो एक सी # कंपाइलर स्थिर वर्गों को लागू करने के लिए उपयोग कर सकता है।

संयोग से, यह तथ्य कि सीआईएल के पास स्थिर वर्ग नहीं हैं, इसका मतलब है कि सामान्य वर्ग तर्कों के रूप में स्थैतिक वर्गों पर प्रतिबंध सीआईएल में मौजूद नहीं हैं। static class X को देखते हुए, सीआईएल आपको बनाता है कि सी # List<X> पर कॉल करेगी। हालांकि, यह देखते हुए कि X या उससे प्राप्त किसी भी वर्ग का कोई उदाहरण नहीं हो सकता है, इस सूची में आप केवल एक ही मूल्य स्टोर कर सकते हैं null

+0

अधिक जानकारी के लिए, अनुमति [TypeAttributes] (https://msdn.microsoft.com/en-us/library/system.reflection.typeattributes%28v=vs.110%29.aspx) देखें, जिसके साथ संबद्ध किया जा सकता है मेटाडेटा में प्रकार। मुहरबंद और सार हैं, लेकिन कोई स्टेटिक नहीं है। –

+0

असल में, हम अपने व्युत्पन्न वर्गों में से एक को तुरंत चालू करके एक अमूर्त वर्ग को तुरंत चालू कर सकते हैं। 'वाहन v = नई कार() 'एक अमूर्त वर्ग का एक उदाहरण बनाता है। –

+0

@ShunLuttin नहीं, जो 'कार' का एक उदाहरण बनाता है, जो एक ठोस वर्ग है। – hvd

1

इसका मतलब यह परोक्ष सार के बाद से वर्ग यह परोक्ष बंद है जब से तुम फैली या इसे से विरासत नहीं कर सकते instantiated नहीं किया जा सकता है।

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