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

有一天我得到一个任务,导出一些数据到Excel中,我看的第一件事是Microsoft.Office.Interop.Excel图书馆,我不知道这可能不是最好的办法,但无论如何,什么让我陷入困境的是,我不得不做一个interface的实例。 是的,如果它实现了相应的interface你可以把一些对象的引用作为一个interface ,但我不是在谈论这个。 基本上这是我正在谈论的代码行。

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

几乎这只是一个常规的对象实例化,如果Microsoft.Office.Interop.Excel.Application不是一个interface ,那就没有什么特别的了。 现在,当你还处于早期教育阶段时,你所学到的关于接口的第一件事就是,你不能创build一个interface实例。 但是这certificate这是错的。 那么,不完全是因为这是它背后产生的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使用这种语法,为什么编译器不会抱怨呢,一个普通的开发人员能做出这样的事情呢? 任何想法将appriciated。