在看到我实际上需要实例化一个接口才能在C#中使用Word互操作时,我感到非常惊讶。
Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application();
根据其XML文档所述,Microsoft.Office.Interop.Word.Application
是一个接口。
![enter image description here](https://istack.dev59.com/KrjHJ.webp)
在看到我实际上需要实例化一个接口才能在C#中使用Word互操作时,我感到非常惊讶。
Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application();
根据其XML文档所述,Microsoft.Office.Interop.Word.Application
是一个接口。
这是因为它是一个COM接口。只有COM接口才能直接实例化, 所以运行时会在后台创建真实类型的实例。个人认为这有点不美观(我也找不到C#规范中相关的解释),但就是这样。
您实际上可以“伪造”这个过程,使得C#编译器相信您的接口是一个COM类型而不需要完全涉及COM...请参见我的相关问题获取详细信息。
Application
不是一个常规的.NET interface
,而是一个COM接口。 来自MSDN:
现在,你可能会问自己为什么? 当C#编译器确定一个这是一个.NET接口,派生自COM coclass,由托管代码要求与相应的COM对象进行交互。
System.Runtime.InteropServices.CoClass
属性正在装饰一个interface
时,它会自动使用提供的type
从CoClass
属性上使用Activator.CreateInstance
。例如:
[System.Runtime.InteropServices.CoClass(typeof(Test))]
- 这将创建一个新的 Test
实例。