2011-10-04 14 views
5

संभव डुप्लिकेट:
Serializable Inheritanceसी # क्रमबद्धता/विरासत

क्रमबद्धता दाय है?

उदाहरण:

[Serializable] 
class A 
{ 
} 

class B : A 
{ 
} 

अगर मैं क्रमानुसार/वर्ग बी का एक उदाहरण deserialize करने की कोशिश, मैं एक अपवाद बताते हुए कि वर्ग serializable रूप में चिह्नित नहीं है मिलता है। इस प्रकार सवाल: serialization विरासत योग्य है? क्या मुझे बस यह याद आ रहा है कि यह कैसे करना है, या क्या हर वर्ग जिसे क्रमबद्ध करने की आवश्यकता है, स्पष्ट रूप से इस तरह चिह्नित किया जाना चाहिए?

उत्तर

11

यह not inheritable है:

यह ध्यान रखें कि Serializable विशेषता विरासत में मिला नहीं किया जा सकता महत्वपूर्ण है। यदि आप MyObject से एक नई कक्षा प्राप्त करते हैं, तो नई कक्षा को विशेषता के साथ भी चिह्नित किया जाना चाहिए, या इसे क्रमबद्ध नहीं किया जा सकता है।

आप इसे serializable बनाने के लिए और साथ ही उपवर्ग को चिह्नित करना चाहिए:

[Serializable] 
class B : A { } 
+2

माइनर टिप्पणी; * इस मामले में *, इस विशेषता की 'विरासत' संपत्ति सीधे प्रासंगिक नहीं है (हालांकि यह सही होने के लिए होती है)। ऐसा इसलिए है क्योंकि मेटाडाटा परत पर, '[सीरियलज़ेबल] '*** *** *** को एक विशेषता के रूप में लागू नहीं किया गया है, लेकिन एक सीएलआई कक्षा ध्वज के रूप में (आप इसे आईएल स्ट्रीम में देख सकते हैं)। –

+1

नोट मार्क के लिए धन्यवाद, यह निश्चित रूप से _not_ मामूली है! –

+0

@Marc Gravell: पाठ बदल दिया और उस संपत्ति संदर्भ को हटा दिया ... धन्यवाद –