在看到我实际需要实例化一个接口以在C#中使用Word Interoop后,我感到非常惊讶。
Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application();
根据XML文档所说的Microsoft.Office.Interop.Word.Application
是一个接口:
视觉工作室是否有可能将其与其他东西混淆?或者是什么允许实例化这个接口?
答案 0 :(得分:14)
这是因为它是一个COM接口。 COM接口 - 和仅 COM接口 - 可以直接实例化。运行时将在后台创建 real 类型的实例。我个人觉得它有点难看(我不能在C#规范中找到对它的任何引用)但是我们去了。
您实际上可以伪造这样,以便C#编译器会认为您的界面是COM类型而没有正确地参与COM ...有关详细信息,请参阅my related question。
答案 1 :(得分:3)
您无法按照定义在c#中实例化interface
,Application
不 常规.NET interface
,但是一个COM接口。来自MSDN:
这是一个从需要的COM coclass派生的.NET接口 通过托管代码实现与相应COM的互操作性 对象
现在,你可能会问自己怎么样?
好吧,当C#编译器确定System.Runtime.InteropServices.CoClass
属性正在装饰interface
时,它会自动使用Activator.CreateInstance
来自CoClass
的type
}属性,例如:
[System.Runtime.InteropServices.CoClass(typeof(Test))]
-
因此,将创建Test
的新实例。