前几天我有一项任务要将一些数据导出到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
中使用这种语法,为什么编译器不会抱怨它,并且常规开发人员可以做出这样的事情吗?任何想法都会得到满足。