Microsoft.Office.Interop.Excel.Application:即使它是一个接口,也可以实例化吗?

时间:2015-10-19 22:29:14

标签: c# excel interface instantiation

所以我正在阅读这篇文章[1],并且有一个部分"要声明一种将帐户信息导出到Excel"使用以下示例:

using Excel = Microsoft.Office.Interop.Excel;
...
static void DisplayInExcel(IEnumerable<Account> accounts)
{
   var excelApp = new Excel.Application();
   ...
}

Excel.Application是一个界面。这怎么可能?

我认为接口不可实现。谢谢!

[1] https://msdn.microsoft.com/en-us/library/dd264733.aspx

1 个答案:

答案 0 :(得分:0)

确实Excel.Application()不是实例,而是属性类型是应用程序接口。那么如何实例化,这要归功于以下属性

[CoClass(typeof(ApplicationClass))]. 

ApplicationClass实现Application(接口)并返回Application接口类型的属性。

[CoClass(typeof(ApplicationClass))]
[Guid("000208D5-0000-0000-C000-000000000046")]
public interface Application : _Application, AppEvents_Event
{
}

看看这段代码。

private static void DisplayInExcel(IEnumerable<string> accounts)
{
  var excelApp = new Excel.Application{};    
}

它也有效。这不是魔术!

我希望它有所帮助