CoClass
コンパイラーを使用すると、インターフェースを実装する具象クラス(ComImport
およびaと)を識別する属性でインターフェースが装飾されている場合に、インターフェースをインスタンス化できますGuid
。インターフェイスをインスタンス化すると、実際にはこの具体的なクラスが舞台裏でインスタンス化されます。
この「機能」は、COMインポートタイプの配管として使用することを目的としています。OutlookApplication
インターフェイスが次の名前の具象クラスによってどのようにサポートされているかに注目してApplicationClass
ください。
[GuidAttribute("00063001-0000-0000-C000-000000000046")]
[CoClassAttribute(typeof(ApplicationClass))]
public interface Application : _Application, ApplicationEvents_11_Event
ほとんどの場合、これらの属性を独自のインターフェイスに適用しないでください。ただし、デモンストレーションのために、コンパイラーがこの可能性を利用してコード内のインターフェースをインスタンス化できることを示すことができます。次の簡単な例を考えてみましょう(GUIDはランダムです)。
[ComImport]
[Guid("175EB158-B655-11E1-B477-02566188709B")]
[CoClass(typeof(Foo))]
interface IFoo
{
string Bar();
}
class Foo : IFoo
{
public string Bar()
{
return "Hello world";
}
}
上記の宣言を使用して、独自のIFoo
インターフェースのインスタンスを作成できます。
IFoo a = new IFoo();
Console.WriteLine(a.Bar());
// Output: "Hello world"
編集:jonnyGoldは、ExcelApplication
インスタンスがMSDNで装飾されていないことを正しく認識していますがCoClass
、これはMSDNの省略のようです。Microsoft.Office.Interop.Excel
アセンブリから逆コンパイルされた署名は次のとおりです。
[CoClass(typeof(ApplicationClass)), Guid("000208D5-0000-0000-C000-000000000046")]
[ComImport]
public interface Application : _Application, AppEvents_Event