2011-09-01 10 views
5

दूसरे दिन मैं सी # बूलियन संरचना मेटाडेटा देख रहा था।वीएस मेटाडाटा दृश्य स्पष्ट इंटरफ़ेस लागू सदस्यों को प्रदर्शित नहीं करता है

बूलियन इंटरफ़ेस IConvertible लागू करता है। लेकिन बूलियन के सदस्यों को देखते हुए मैं अधिकांश आईकोनर्टेबल सदस्यों को नहीं देख पा रहा था।

मैंने अपने स्वयं के वर्ग बनाने सहित कुछ सहयोगियों के साथ कुछ परीक्षण किए हैं, और इस निष्कर्ष पर पहुंचे कि आईकोनवर्टिबल को स्पष्ट रूप से बूलियन के लिए लागू किया जाना चाहिए।

सवाल यह है कि वे क्यों दिखाई नहीं दे रहे हैं? मैं समझता हूं कि यह 'डिज़ाइन निर्णय द्वारा' हो सकता है लेकिन मैं समझता हूं कि अगर मेटाडेटा का निरीक्षण करने वाले किसी के लिए दृश्यमान होता तो यह अधिक मूल्य जोड़ता है।

परीक्षण VS2010 .NET4.0 में

+3

आप वीएस में मेटाडेटा व्यू के बारे में बात कर रहे हैं और वास्तविक मेटाडेटा के बारे में नहीं। वास्तविक मेटाडाटा में स्पष्ट रूप से स्पष्ट इंटरफ़ेस कार्यान्वयन शामिल हैं। – CodesInChaos

+0

स्पष्टीकरण –

उत्तर

5

कारण यह है कि वे विधियां केवल आई-इंटरफ़ेस को लागू करने के लिए हैं और कक्षा 'सार्वजनिक इंटरफ़ेस को बढ़ाने के लिए नहीं हैं।

public class MyClass : IConvertible 
{ 
// implementation 
} 

आप MyClass, परिवर्तनीय होने के लिए वास्तव में चाहते हो सकता है, तो आप तरीकों कि उम्मीद करने के इसके बारे में संदर्भ पारित कर सकते हैं IConvertible:

क्या मेरा मतलब है कि यदि आप निम्नलिखित है

public void DoSomethingWithConvertible(IConvertible conv) 

लेकिन हो सकता है कि आप कनवर्ट विधियों का पर्दाफाश करने के लिए MyClass टाइप करने के चर नहीं चाहते हैं। आप बस MyClass के सार्वजनिक इंटरफ़ेस को उस विधि के लिए नहीं चाहते हैं, तो आप इंटरफ़ेस को स्पष्ट रूप से कार्यान्वित करें। यह दृष्टिकोण का पूरा विचार है। इसका मतलब यह है निम्नलिखित अनुमति दी है नहीं:

MyClass a = new MyClass(); 
a.Convert(); 

हालांकि, निम्नलिखित अभी भी अनुमति दी जा रही है:

MyClass a = new MyClass(); 
((IConvertible)a).Convert(); 

इसके पीछे पूरे विचार है कि यहां तक ​​कि हम ठीक उसी उदाहरण का उपयोग कर रहे हालांकि, एक क्योंकि MyClass में विधि नहीं है। एक IConvertible के रूप में विधि है।इसके बारे में सोचें जैसे कि आप उदाहरण को विभाजित व्यक्तित्व की अनुमति दे रहे हैं।

आमतौर पर मैं प्रत्येक इंटरफ़ेस को पूर्ण रूप से लागू करना समाप्त करता हूं। हालांकि, बहुत विशिष्ट स्थितियां हैं जहां मैं ऊपर उल्लिखित कारणों के लिए स्पष्ट रूप से उन्हें लागू कर रहा हूं।

बीटीडब्ल्यू, महान प्रश्न के लिए धन्यवाद!

-1

वे explicitly implemented हैं किया गया। आप यहां सभी लागू कन्वर्टेबल्स पा सकते हैं: http://msdn.microsoft.com/en-us/library/system.boolean.aspx

+0

के लिए धन्यवाद लेकिन मुझे एमएसडीएन देखने की आवश्यकता है। मैं समझना चाहता हूं कि वे मेटाडेटा –

+0

में क्यों दिखाई नहीं दे रहे हैं इंटेलिजेंस उन्हें छुपाता है क्योंकि डेवलपर ने उन्हें स्पष्ट रूप से लागू करना चुना है = आपको उचित विधि (0) – jgauffin

2

क्योंकि स्पष्ट इंटरफ़ेस कार्यान्वयन वास्तव में कार्यान्वयन को छुपाता है।

2

मेटाडाटा वास्तव में explicitly implemented दिखाता है। क्या आपका मतलब इंटेलिजेंस है और मेटाडेटा नहीं है?

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

IDictinary<T,K> एक और उदाहरण है। यह IEnumerable<KeyValuePair<T,K>> लागू करता है जिससे संग्रह में सभी जोड़े और ICollation<KeyValuePair<T,K>> पर पुन: प्रयास करना संभव हो जाता है। तो आप एक KeyValuePair दिए गए शब्दकोश पर जोड़ें पर कॉल कर सकते हैं लेकिन आम तौर पर आपको Add(K, key, T Value)

क्लास का निरीक्षण करने वाले टूल के साथ निरीक्षण करने का प्रयास करें जो मेटाडेटा तक पढ़ने की पहुंच प्रदान करता है। ILDASM एक के लिए और आप वास्तव में स्पष्ट रूप से कार्यान्वित तरीकों के मेटाडेटा पा सकते हैं।

+0

प्राप्त करने के लिए ऑब्जेक्ट को कार्यान्वित इंटरफेस के रूप में देखना चाहिए मेरा मतलब मेटाडाटा है। मैं स्पष्ट रूप से लागू नहीं दिखाए जाने में इंटेलिजेंस से सहमत हूं। –

+0

@luis लेकिन फिर यह गलत है यह मेटाडेटा का हिस्सा है। –

+0

मैं केवल यह देख सकता हूं कि बूलियन आईकोनवर्टिबल को लागू करने की घोषणा करता है लेकिन मैं वीएस -2010 में मेटाडेटा में आईकोनवर्टेबल सदस्यों को नहीं देख सकता। क्या आप? –

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