【问题标题】:Microsoft.Office.Interop.Excel.Application: instantiable even if it's an interface? [duplicate]Microsoft.Office.Interop.Excel.Application:即使是接口也可以实例化? [复制]
【发布时间】:2015-10-19 22:29:13
【问题描述】:

所以我正在阅读这篇文章[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

【问题讨论】:

  • 它正在实例化一个实现该接口但将其作为接口类型返回的对象。

标签: c# excel interface instantiation


【解决方案1】:

确实Excel.Application() 不是实例化,而是一种属性女巫类型是应用程序接口。那么是如何实例化的,那得感谢下面的Attributes

[CoClass(typeof(ApplicationClass))]. 

ApplicationClass实现Application(interface)并返回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{};    
}

它也有效。这不是魔法!

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2019-01-03
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    相关资源
    最近更新 更多