2010-04-14 21 views
27

मुझे लगता है कि एक इंटरफेस में उस विशेषता को जोड़ना सहायक होगा यह सुनिश्चित करने के लिए कि आप इंटरफ़ेस का उपयोग करने वाले वर्ग नहीं बनाते हैं और उन्हें क्रमबद्ध बनाने के लिए भूल जाते हैं।इंटरफेस क्यों नहीं हैं [Serializable]?

यह एक बहुत ही मौलिक सवाल हो सकता है, लेकिन मैं विशेषज्ञों से पूछना चाहता था।

+0

यदि आप चाहते हैं कि http: // stackoverflow कैसे हो, तो आपको यह जवाब देखना चाहिए।कॉम/प्रश्न/1333864/xml-serialization-of-interface-property – juharr

उत्तर

65

इंटरफेस एक अनुबंध को परिभाषित करते हैं और उनके पास कोई स्वयं की स्थिति नहीं है।

सीरियलाइजेशन राज्य ऑब्जेक्ट मॉडल में और बाहर सहेजने और लोड करने के बारे में है।

कोई ऐसी स्थिति को क्रमबद्ध करने के लिए बहुत अधिक बिंदु नहीं है जिसमें कोई राज्य नहीं है।


एक अंतरफलक के एक कार्यान्वयन के लिए मजबूर कर Serializable होने के लिए के व्यावहारिक सवाल का जवाब करने के लिए - यही कारण है कि ISerializable इंटरफ़ेस मौजूद है।

नेट आप एक अंतरफलक है कि अन्य इंटरफेस को लागू करना चाहिए घोषणा कर सकते हैं में:

interface MustBeSerializable : ISerializable {} 

कुछ और जानकारी here देखें।

+0

बहुत बढ़िया स्पष्टीकरण :-) – Raja

+0

ग्रेट स्पष्टीकरण। –

+6

शैतान के वकील: इंटरफेस का अर्थ है * कैसे * वस्तुएं अपने राज्य के साथ काम करती हैं। इंटरफेस में राज्य नहीं है लेकिन उनका उपयोग उन ऑब्जेक्ट्स को परिभाषित करने के लिए किया जाएगा जो राज्य के उपयोग के तरीके के साथ करते हैं और अनुबंध करते हैं। – Dinah

4

आप serializable होना करने के लिए वर्गों है कि अपने कस्टम इंटरफ़ेस IMyInterface लागू मजबूर करने के लिए चाहते हैं तो आप को परिभाषित कर सकते यह है:

interface IMyInterface : ISerializable 
{ 
    // Custom interface definition 
} 

यह और अधिक स्पष्ट रूप से इंगित करता है कि लागू करने वर्ग क्रमबद्धता का समर्थन करना चाहिए। यह कक्षा को [Serializable] विशेषता के साथ चिह्नित करने की आवश्यकता को नहीं हटाता है।

IIRC, आप भी जांच होती है कि कि कक्षाओं कि IMyInterface से विरासत संबंधित [Serializable] विशेषता और इस तरह से की आवश्यकता नहीं पड़ती वर्गों कस्टम क्रमबद्धता को लागू करने के साथ चिह्नित हैं एक FxCop कस्टम नियम बना सकते हैं।

2

कुछ अच्छा है हालांकि इंटरफ़ेस क्या है और यह संभव नहीं होने के कारण गूढ़ कारणों से कुछ अच्छा है। हालांकि उसने कहा: मैं आपसे सहमत हूं। ऐसी कई चीजें हैं जो उपयोगी होंगी अगर हम उन्हें इंटरफेस में शामिल कर सकें। [Serializable] और सांख्यिकी को ध्यान में आता है।

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

2

ठीक है, वहाँ एक कारण यह है कि नए वर्गों के रूप में डिफ़ॉल्ट रूप से serializable रूप में चिह्नित नहीं कर रहे हैं: Serializable विशेषता जोड़कर, आप स्वीकार करते हैं आप सुनिश्चित किया है कि कि अपनी कक्षा में क्रमबद्धता काम करता है, आपके उदाहरण के लिए उचित डेटा प्रकार का चयन करके फ़ील्ड और यदि आवश्यक हो तो धारावाहिक तर्क जोड़कर।

तो, यदि आप अपनी कक्षा में Serializable विशेषता जोड़ने के लिए "भूल गए" हैं, तो आप शायद यह भी जांचना भूल गए हैं कि धारावाहिक वास्तव में आपकी कक्षा पर काम करता है या नहीं। माना जाता है कि, कई मामलों में यह "बॉक्स से बाहर" काम करेगा, इसलिए विशेषता जोड़ना बाकी है, लेकिन आपको डबल-चेक और स्पष्ट रूप से उस तथ्य को स्वीकार करना होगा (मैन्युअल रूप से विशेषता जोड़कर)।

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