.net में मूल्य प्रकार है कि वे परिभाषित हालांकि वे एक विशेष वर्ग ValueType
कहा जाता है से व्युत्पन्न वर्ग हैं, और प्रत्येक मान प्रकार के लिए वहाँ एक ढेर ऑब्जेक्ट प्रकार जो एक वर्ग वस्तु है कि ValueType
से निकला है की तरह बर्ताव करता है में अजीब है, लेकिन एक मूल्य-प्रकार भंडारण स्थान बाइट्स का संग्रह रखता है जो या तो एक आदिम मूल्य का प्रतिनिधित्व करता है, या अपने सभी सार्वजनिक और निजी क्षेत्रों को पकड़ने के लिए आवश्यक बाइट्स के संयोजन को दर्शाता है। चूंकि मान प्रकार भंडारण स्थान केवल उनके मानों का प्रतिनिधित्व करने के लिए आवश्यक बाइट्स धारण करते हैं, और न ही किसी प्रकार की जानकारी रखते हैं और न ही किसी ऑब्जेक्ट का कोई संदर्भ जो प्रकार की जानकारी रखता है, वह कोड जो मान प्रकार भंडारण स्थान का उपयोग करता है उसे पता होना चाहिए कि यह वास्तव में क्या है। पारंपरिक विरासत की आवश्यकता है कि वस्तुओं को अपने स्वयं के प्रकार के बारे में जानकारी हो, लेकिन कोई प्रावधान नहीं है जिसके माध्यम से मूल्य प्रकार ऐसा कर सकते हैं।
यह कुछ विशेष नियमों के साथ मूल्य-प्रकार उत्तराधिकार के कुछ सीमित रूप में अनुमति देने के लिए .net के लिए धारणात्मक संभव (और उपयोगी) होगा ऐसी है कि, जबकि एक BaseStructure
चर केवल एक BaseStructure
पकड़ सकता है और एक DerivedStructure
पकड़ नहीं कर सकता है, कोई StructureUser<T> where T:BaseStructure
परिभाषित कर सकता है, और ऐसी कक्षा या विधि BaseStructure
के व्युत्पन्न को स्वीकार कर सकती है और उन सदस्यों का उपयोग कर सकती है - फ़ील्ड समेत - जो मूल प्रकार के लिए आम थीं।दुर्भाग्यवश, जेनेरिकों के नियमों को इस तरह से परिभाषित करना मुश्किल होगा कि अनुमत परिदृश्यों में लगातार व्यवहार करना और फिर भी कोई मौजूदा कोड तोड़ना न पड़े। उदाहरण के लिए, एक वर्ग के भीतर Foo<T,U> where T:U
यह हमेशा संभव, प्रकार U
के एक चर करने के लिए एक T
स्टोर करने के लिए भले ही U
एक मान प्रकार (उस स्थिति में है, क्योंकि मूल्य प्रकार सील कर रहे हैं, T
और U
ही होने की गारंटी कर रहे हैं प्रकार)। यदि U
विरासत योग्य मान प्रकार हो सकता है और T
व्युत्पन्न हो सकता है, तो ऐसी गारंटी नहीं होगी। ऐसी विरासत से जुड़ी कठिनाइयों को देखते हुए, एक अधिक उपयोगी विकल्प एक सुरक्षित (भले ही सीमित) माध्यम प्रदान करना होगा जिसके माध्यम से एक संपत्ति एक बायफ या एक कॉन्स-बायफ का पर्दाफाश कर सकती है (एक बायफ वह चीज है जो पैरामीटर का उपयोग करता है एक ref
योग्यता)। इस तरह की एक विशेषता फ़ील्ड और गुणों के बीच अपरिहार्य अर्थात् भेद को हटा देगी, और यह लागू करने के तरीके के आधार पर कक्षाओं के साथ उपयोग किए जाने पर भी कुछ प्रमुख फायदे प्रदान कर सकते हैं (उदाहरण के लिए, यह अपरिवर्तनीय और परिवर्तनीय प्रकारों के कुशल मिश्रण की अनुमति दे सकता है)।
structs और वर्ग अलग हैं, कोई संरचना प्रकार वर्ग नहीं है, यह या तो एक या दूसरे है। – Freeman
कुछ और होना चाहिए ... क्या यह आपका पूरा कोड है? –