2015-10-19 71 views
0

所以我正在读这篇文章[1],并有一个部分“要声明出口帐户信息到Excel的方法”用下面的例子:Microsoft.Office.Interop.Excel.Application:实例化即使它是一个接口?

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

事实上Excel.Application()不是instanciation而是属性女巫类型是应用程序接口。因此,如何被实例化,那么它的感谢以下属性

[CoClass(typeof(ApplicationClass))]. 

ApplicationClass实现应用程序(接口)和返回式应用接口的属性。

[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{};  
} 

它也可以工作。这不是魔术!

我希望它有帮助