调用接口的无参数构造函数

时间:2014-08-11 18:12:52

标签: c# excel office-interop

前几天我有一项任务要将一些数据导出到excel中,我看到的第一件事是Microsoft.Office.Interop.Excel库,我不知道这可能不是最好的方法,但是无论如何,让我陷入困境的是我必须创建一个interface的实例。是的,你可以将一些对象的引用作为interface,如果它实现了相应的那个,但我不是在谈论它。基本上这是我正在讨论的代码行。

Microsoft.Office.Interop.Excel.Application aa = new Microsoft.Office.Interop.Excel.Application();

这几乎只是一个常规的对象实例化,如果Microsoft.Office.Interop.Excel.Application不是interface,那么就没有什么特别之处。现在,当您还处于早期教育阶段时,首先要了解的是接口,您不能创建interface的实例。但这证明这是错误的。嗯,不完全是,因为这是它背后产生的IL

  IL_0001:  ldstr      "00024500-0000-0000-C000-000000000046"
  IL_0006:  newobj     instance void [mscorlib]System.Guid::.ctor(string)
  IL_000b:  call       class [mscorlib]System.Type [mscorlib]System.Runtime.InteropServices.Marshal::GetTypeFromCLSID(valuetype [mscorlib]System.Guid)
  IL_0010:  call       object [mscorlib]System.Activator::CreateInstance(class [mscorlib]System.Type)
  IL_0015:  castclass  Microsoft.Office.Interop.Excel.Application

现在,没有任何内容可以说"创建一个界面实例" (正如我猜的那样),所以它在interface构造函数后面做了一些事情。但我的问题仍然存在。如何在interface中使用这种语法,为什么编译器不会抱怨它,并且常规开发人员可以做出这样的事情吗?任何想法都会得到满足。

0 个答案:

没有答案