सी # संरचना से उत्तराधिकारी संभव नहीं है। यह मेरे लिए स्पष्ट नहीं है कि यह क्यों है:.NET मूल्य प्रकार क्यों सील किए गए हैं?
- स्पष्ट रूप से आपके पास एक संदर्भ प्रकार नहीं है जो मूल्य प्रकार से प्राप्त होता है; यह
- एक आदिम प्रकार (Int32, Double, Char, आदि) से प्राप्त करने के लिए उचित नहीं लगता है
- आपको कॉल (गैर-वर्चुअल) विधियों पर कॉल करने में सक्षम होना चाहिए एक व्युत्पन्न उदाहरण का उपयोग कर आधार। आप एक व्युत्पन्न संरचना से आधार पर जा सकते हैं, क्योंकि वे एक ही स्मृति को ओवरलैप करेंगे। मुझे लगता है कि व्युत्पन्न आधार से कास्टिंग काम नहीं करेगा, क्योंकि आप रनटाइम पर व्युत्पन्न संरचना के प्रकार को नहीं जानते थे।
- मैं देख सकता है कि आप अपने वर्ग पदानुक्रम में आभासी तरीकों को लागू नहीं कर सकता है, के बाद से मूल्य प्रकार आभासी सदस्यों
मुझे आश्चर्य है कि नहीं हो सकता है अगर यह CLR में एक तकनीकी सीमा, या कुछ है कि है सी # कंपाइलर आपको करने से रोकता है?
संपादित करें: वैल्यू प्रकारों में वर्चुअल विधियां नहीं हो सकती हैं, और मुझे लगता है कि यह सीमाएं उन परिस्थितियों को मानती हैं जिनमें आप विरासत का उपयोग करना चाहते हैं। हालांकि, यह अभी भी विरासत के रूप में एकत्रीकरण छोड़ देता है। फ़ील्ड के साथ Shape
संरचना की कल्पना करें: मैं कोड लिख सकता हूं जो Shape
से प्राप्त किसी भी संरचना को स्वीकार करता है, और इसके Colour
फ़ील्ड तक पहुंचता है, भले ही मैं वर्चुअल Shape.Draw
विधि कभी नहीं लिखूं।
मैं एक परिदृश्य के बारे में सोच सकता हूं जो गैर-मुहरबंद मूल्य प्रकारों से टूट जाएगा। मान प्रकार Equals
और GetHashCode
को सही ढंग से लागू करना चाहिए; भले ही System.Object
पर इन दो विधियों को वर्चुअल हैं, फिर भी वे मूल्य प्रकारों पर गैर-वर्चुअल रूप से कॉल किए जाते हैं। यहां तक कि यदि मूल्य प्रकारों को बंद नहीं किया गया था, तो किसी अन्य व्यक्ति से निकाली गई संरचना लिखने वाले व्यक्ति को इन दो विधियों के अपने कार्यान्वयन को नहीं लिखा जा सकता था और उन्हें सही तरीके से बुलाया जाने की उम्मीद थी।
मुझे यह इंगित करना चाहिए कि मैं सुझाव नहीं दे रहा हूं कि मुझे अपने कोड में structs से प्राप्त करने में सक्षम होना चाहिए। मैं जो करने की कोशिश कर रहा हूं, हालांकि, यह अनुमान लगाना है कि यह विशेष कोड गंध क्यों .NET द्वारा प्रतिबंधित है।
संपादित करें 2: मैंने अभी this very similar question देखा है, जिसका उत्तर प्रभावी ढंग से है "क्योंकि तब मान प्रकारों के सरणी काम नहीं करेंगे"।
संभावित डुप्लिकेट [क्यों समर्थन विरासत का समर्थन नहीं करता है?] (Http://stackoverflow.com/questions/1222935/why-dont-structs-support-inheritance) – nawfal