2015-06-02 3 views
5

System.IO.Path COM क्यों दिखाई देता है जब इसमें केवल स्थिर सदस्य और फ़ील्ड होते हैं?System.IO.Path (केवल स्थिर सदस्यों वाला वर्ग) COM क्यों दिखाई देता है?

[ComVisibleAttribute(true)] 
public static class Path 

मैं धारणा है कि एक एक COM वस्तु के स्थिर सदस्य कार्यों कॉल नहीं कर सकते तहत किया गया था (और साथ ही, उस वर्ग एक डिफ़ॉल्ट निर्माता जो Path नहीं है की आवश्यकता होगी)।

भी उपयोगकर्ता ध्यान दें sharptooth टिप्पणी:

यह भी ध्यान देने योग्य बात यह है कि यह Guid विशेषता है जो सबसे अधिक संभावना का मतलब वर्ग आईडी हर बार संकलित किया गया है पुनर्जीवित किया जाएगा नहीं है लायक है।

PATH COM क्यों दिखाई देता है और इसके साथ क्या किया जा सकता है?

+0

यह भी ध्यान देने योग्य है कि इसमें 'Guid' विशेषता नहीं है जिसका सबसे अधिक संभावना है कि प्रत्येक बार संकलित होने पर कक्षा आईडी को पुन: उत्पन्न किया जाएगा। – sharptooth

उत्तर

5

निश्चित रूप से, यह एक गलती है। यह अच्छी कंपनी में है, mscorlib से कई अन्य वर्गों में एक ही समस्या है। उदाहरण के लिए रजिस्ट्री, निर्देशिका, फ़ाइल, बफर, पर्यावरण, निरर्थक, मॉनीटर, टाइमआउट। लेकिन लगातार नहीं, बिटकॉन्टर, कंसोल, कन्वर्ट, जीसी, मैथ, इत्यादि के लिए विशेषता ठीक से छोड़ी गई थी।

एमएसकोरिब में कई कक्षाओं के लिए विशेषता अन्यथा महत्वपूर्ण है, कस्टम सीएलआर होस्ट और स्क्रिप्टिंग भाषाएं इस पर निर्भर करती हैं। ऐसा लगता है कि माइक्रोसॉफ्ट प्रोग्रामर (ओं) जिसने लागू किया था, ऑटो-पायलट पर काम कर रहा था। गलती अपरिहार्य है, Tlbexp जानता है कि इससे कैसे निपटें। कोक्लास को [noncreatable] विशेषता मिलती है ताकि क्लाइंट प्रोग्राम कक्षा का उदाहरण नहीं बना सकें। और स्वत: जेनरेट किए गए इंटरफेस खाली हैं। तो यह प्रकार बस उपयोग करने योग्य नहीं है और आप इसे गलती से इस्तेमाल नहीं कर सकते हैं।

यदि आप वास्तव में चाहते हैं तो एक COM क्लाइंट प्रोग्राम से System.IO.Path का उपयोग करने के लिए आपको इसके लिए एक [कॉमविज़िबल] रैपर क्लास लिखना होगा। निश्चित रूप से गैर-स्थैतिक, आपके द्वारा लिखे गए प्रत्येक विधि को सीधे पथ विधियों में से एक को सीधे भेज दिया जा सकता है। आप कोकलास पर [appobject] विशेषता चाहते हैं, इसलिए यह क्लाइंट प्रोग्राम में स्थिर रूप से व्यवहार करता है जो विशेषता का समर्थन करता है, दुख की बात है कि .NET के पास इसके लिए कोई विशेषता नहीं है।

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