सी # विनिर्देश में अनुभाग की व्याख्या की आवश्यकता है


11

मैं C # विनिर्देश पढ़ रहा हूं । मैं एक खंड पर स्पष्टीकरण का उपयोग कर सकता हूं:

C # में यूनिफाइड टाइप सिस्टम है। सभी सी # प्रकार, जैसे कि आदिम प्रकार जैसे कि इंट और डबल, एक ही रूट ऑब्जेक्ट प्रकार से विरासत में मिला। इस प्रकार, सभी प्रकार के साझा ऑपरेशन का एक सेट साझा करते हैं, और किसी भी प्रकार के मूल्यों को एक सुसंगत तरीके से संग्रहीत, परिवहन और संचालित किया जा सकता है। इसके अलावा, C # उपयोगकर्ता-परिभाषित संदर्भ प्रकार और मूल्य प्रकार दोनों का समर्थन करता है, जिससे ऑब्जेक्ट के गतिशील आवंटन के साथ-साथ हल्के संरचनाओं के इन-लाइन स्टोरेज की अनुमति मिलती है।

इस संदर्भ में "हल्के संरचनाओं के इन-लाइन स्टोरेज" का क्या मतलब है?

जवाबों:


11

स्विक का जवाब अच्छा है लेकिन मुझे लगा कि मैं कुछ अतिरिक्त अंक जोड़ूंगा।

सबसे पहले, पैराग्राफ त्रुटिपूर्ण है। सूचक प्रकार वस्तु से विरासत में नहीं मिलते हैं। मान जो कि संकलित समय पर इंटरफ़ेस प्रकार या प्रकार पैरामीटर प्रकार के लिए जाना जाता है, रनटाइम के दौरान, या तो अमान्य संदर्भ या किसी चीज़ से उत्पन्न होने वाले उदाहरण हैं, जो ऑब्जेक्ट से विरासत में मिला है, लेकिन मुझे हमेशा यह कहना अजीब है कि ये प्रकार हैं " विरासत ”वस्तु से; उत्तराधिकार वह संपत्ति है जो पूर्वज के सदस्य वंश के सदस्य होते हैं, लेकिन आप आमतौर पर "ToString" को IEnumerable का सदस्य नहीं मानते हैं। आप इसे IEnumerable लागू करने वाली चीज़ का सदस्य होने के रूप में सोचते हैं ।

पैराग्राफ भी त्रुटिपूर्ण है क्योंकि यह एकमात्र स्थान है "आदिम प्रकार" कल्पना में दिखाई देता है, और यह परिभाषा के बिना दिखाई देता है। इसलिए यह अनावश्यक और भ्रामक है और इसे हटा दिया जाना चाहिए।

मैं चाहता हूं कि यह पैराग्राफ थोड़ी देर के लिए तय हो जाए। अगली बार जब मैं मैड्स देखूंगा तो उन्हें याद दिलाऊंगा।

अपने विशिष्ट प्रश्न को संबोधित करने के लिए: svick निश्चित रूप से सही है, लेकिन यह एक विशिष्ट उदाहरण देखने के लिए सहायक है। जब आप कहें:

struct ColorfulInt
{
    int value;
    Color color;
    ...
}

और आप बनाते हैं, कहते हैं, एक सरणी:

ColorfulInt[] x = new ColorFulInt[100];

फिर उन 100 इन्टस और 100 कलर्स का स्टोरेज अरेंजमेंट में ही हो जाता है । अगर ColorInt एक वर्ग के बजाय थे, तो सरणी में ColorInt के 100 संदर्भ होंगे, जिनमें से प्रत्येक को व्यक्तिगत रूप से आवंटित करना होगा। व्यक्तिगत रूप से उन सौ तत्वों को आवंटित करना समय और स्थान दोनों में बहुत कम कुशल है, केवल सरणी में ही भंडारण को आवंटित करने की तुलना में बहुत कम है।


तो, उन वस्तुओं की मेमोरी एब्स्ट्रैक्शन में महत्व है, जहां जब आप उन्हें हेरफेर करने के लिए तैयार होते हैं, तो वे एक्सेस करने में आसान होते हैं यदि वे पता करने योग्य अंतरिक्ष छंद बिंदुओं के एक सन्निहित ब्लॉक में होते हैं जो जानता है कि कहां है? क्या यह सही है, या मैं अभी भी कुछ याद कर रहा हूं?
22

@ चक: सही। आप अप्रत्यक्ष के उपरि का भुगतान नहीं करते हैं, और आपको अच्छा कैश इलाका भी मिलता है।
एरिक लिपर्ट

12

इसका अर्थ है कि मान प्रकार सीधे संग्रहीत होते हैं जहां आप उन्हें परिभाषित करते हैं, जो संदर्भ प्रकारों की तुलना में उन्हें अधिक कुशल बनाता है।

पूरी तरह से इसका क्या मतलब है? यदि आपके पास मूल्य प्रकार का एक स्थानीय चर है, तो इसे आमतौर पर सीधे स्टैक पर संग्रहीत किया जाएगा (लेकिन कई अपवाद हैं)। यदि आपके पास एक मूल्य प्रकार का क्षेत्र है, तो इसे सीधे एनक्लोजिंग क्लास या संरचना में संग्रहीत किया जाएगा।


1
यह समझ आता है। Fleshing के लिए धन्यवाद कि मेरे लिए, svick!
१T:
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.