2010-03-19 15 views
6

सबसे पहले, मुझे यह कहना है कि मैं System.ComponentModel.Component के बारे में बात करने जा रहा हूं।.NET घटक मॉडल स्पष्टीकरण

तुम्हें पता है, मैं समझता हूं कि .NET Component Model क्षमता (साइट सेवाओं के माध्यम से) प्रदान करता है अलग Components परिभाषित करने के लिए है, इसलिए वे एक शिथिल युग्मित तरह से एक दूसरे के साथ संवाद कर सकते हैं, और कहा कि प्रत्येक Component आसानी से बदली है।

लेकिन मेरी बात यह है कि मैं इस अन्यथा प्राप्त कर सकते हैं: मेरा मतलब है अगर मैं सही ढंग से Object Oriented Programming दप डिजाइन, मैं Abstract classes, Interfaces आदि के माध्यम से सभी का उल्लेख कार्यक्षमता/अंतर हासिल कर सकते हैं।

फिर क्यों और जब मैं घटक मॉडल पर भरोसा करना चाहिए?

उत्तर

5

ठीक है, आप इसे अपने स्वयं के बेस क्लास, इंटरफेस आदि के साथ कर सकते हैं। वास्तव में, यह बिल्कुल ठीक है कि System.ComponentModel है। यह इंटरफेस और बेस क्लास का एक आम सेट है ताकि आप अपने घटकों को कार्यान्वित कर सकें और अन्य लोगों के कार्यान्वयन के साथ उनका उपयोग कर सकें।

यदि आपने अभी अपनी खुद की बेस क्लास और इंटरफेस बनाए हैं, तो कोई भी जो आपके कोड के साथ इंटरफ़ेस करना चाहता है उसे आपके वर्गों का उपयोग करना होगा। और क्या होगा यदि वे एक बार में दो अलग-अलग विक्रेता के घटकों के साथ एकीकृत करना चाहते थे?

विशेष रूप से WinForms में सभी चीजें सिस्टम का उपयोग करती हैं। कॉम्पोनेंट मॉडल सामग्री जो आप अपने फॉर्म पर रख सकते हैं लागू करने के लिए। उन्हें कुछ इंटरफ़ेस का प्रतिनिधित्व करने के लिए चुनना पड़ा, तो सिस्टम.कंपोनेंट मॉडेल में परिभाषित क्यों नहीं किया गया? वे पहले से ही एक पूरी तरह से अच्छी तरह से डिजाइन किए गए पहले से ही उपलब्ध होने पर खुद का निर्माण क्यों करेंगे?

2

यह आपको डिज़ाइन-टाइम उदाहरण के लिए उपयोग करने की क्षमता प्रदान करता है। दृश्य स्टूडियो।

"System.ComponentModel नामस्थानों में ऐसे प्रकार होते हैं जो घटकों और नियंत्रणों के रन-टाइम और डिज़ाइन-टाइम व्यवहार को लागू करते हैं।" आपके द्वारा प्रदान की जाने वाली कार्यक्षमता कुछ भी हो सकती है (BackgroundWorkerComboBox पर कुछ अलग है, फिर भी वे Component दोनों हैं)।

ComponentModel क्या मेटाडेटा प्रदान करता है और भुगतान यह है कि आप दृश्य डिजाइनर में उपयोग किए जा सकने वाले घटकों को डिज़ाइन कर सकते हैं। इसलिए:

public interface IDesigner : IDisposable { 

     IComponent Component {get;}   
     DesignerVerbCollection Verbs {get;} 
     void DoDefaultAction(); 
     void Initialize(IComponent component); 
} 

नाम स्थान भी TypeDescriptor/कन्वर्टर सामान फिर से गुणों के डिजाइन समय उपयोग के लिए प्रयोग करने योग्य प्रदान करता है।

(यह सुझाव दिया गया है कि आप सिस्टम.कंपोनेंट मॉडल को आईओसी कंटेनर के रूप में उपयोग कर सकते हैं। मैंने कभी भी ऐसा नहीं देखा है, जैसा कि आप कहते हैं, इसके लिए यह केवल अच्छे डिजाइन पर कुछ भी नहीं प्रदान करता है)।

तो: System.ComponentModel.Component का उपयोग करने पर विचार करें जब आप अपने घटक के साथ IDesigner प्रदान करना चाहते हैं।