संकलक अगर वे (एक ComImport
और एक Guid
के रूप में भी) एक CoClass
विशेषता ठोस वर्ग है कि उन्हें लागू करता है की पहचान करने के साथ सजाया जाएगा तो आप उसे इंटरफेस का दृष्टांत देता है। जब आप इंटरफ़ेस को तुरंत चालू करते हैं, तो आप वास्तव में इस ठोस वर्ग को पीछे के दृश्यों को तुरंत चालू कर देंगे।
यह "फीचर" का उद्देश्य COM आयातित प्रकारों के लिए नलसाजी के रूप में उपयोग किया जाना है। गौर करें कि आउटलुक Application
इंटरफ़ेस ApplicationClass
नाम के एक ठोस वर्ग के द्वारा समर्थित है:
[GuidAttribute("00063001-0000-0000-C000-000000000046")]
[CoClassAttribute(typeof(ApplicationClass))]
public interface Application : _Application, ApplicationEvents_11_Event
अधिकांश परिस्थितियों में, आप अपने स्वयं के इंटरफेस को इन विशेषताओं को लागू करने नहीं जाना चाहिए। हालांकि, प्रदर्शन के लिए, हम दिखा सकते हैं कि कंपाइलर आपको अपने कोड में इंटरफेस को तत्काल करने के लिए इस संभावना का लाभ उठाने की अनुमति देता है। निम्नलिखित सरल उदाहरण पर विचार करें (GUID यादृच्छिक है):
IFoo a = new IFoo();
Console.WriteLine(a.Bar());
// Output: "Hello world"
संपादित:: हालांकि jonnyGold सही ढंग से नोटों
[ComImport]
[Guid("175EB158-B655-11E1-B477-02566188709B")]
[CoClass(typeof(Foo))]
interface IFoo
{
string Bar();
}
class Foo : IFoo
{
public string Bar()
{
return "Hello world";
}
}
ऊपर घोषणाओं का उपयोग करना, आप अपने खुद के IFoo
इंटरफ़ेस का एक उदाहरण बना सकते हैं कि एक्सेल Application
उदाहरण एमएसडीएन पर CoClass
के साथ सजाया नहीं गया है, यह एक एमएसडीएन चूक है। Microsoft.Office.Interop.Excel
विधानसभा से decompiled हस्ताक्षर है:
[CoClass(typeof(ApplicationClass)), Guid("000208D5-0000-0000-C000-000000000046")]
[ComImport]
public interface Application : _Application, AppEvents_Event
स्पष्ट स्पष्टीकरण के लिए धन्यवाद। अब मैं सोच रहा हूं कि "क्यों?", लेकिन मुझे लगता है कि COM इंटरऑप की अच्छी समझ उस के लिए पूर्व-आवश्यकता होगी। –
मेरा असंतुलित अनुमान यह है कि COM के साथ इंटरऑपरेट करते समय यह कुछ विरासत आवश्यकताओं को संबोधित करने के लिए .NET संकलक में "हैक" पेश किया गया था। – Douglas
[इस] के अनुसार (http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.application.aspx) 'माइक्रोसॉफ्ट.ऑफिस.इंटरोप.एक्ससेल.एप्लिकेशंस' सजाया नहीं गया है 'CoClassAttribute' के साथ, लेकिन यह होना चाहिए। बेशक, मैंने सवाल में डॉटपीक का उपयोग नहीं किया है। – bluevector