接口真的不能被实例化?

在做导出Excel时,有一行代码
Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();

new了一个接口,编译器也报错,而且运行正确。

 

此接口定义:

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

 

谷歌之:

NET提供Interop 程序集,它用作托管和非托管代码之间的桥梁,将 COM 对象成员映射为等价的 .NET 托管成员。

在.net里面非托管转换成托管的接口用CoClass标记接口转换成类,所以excel.application 实例化是可以的。

 

 

还有一种替代此行代码的方法,
Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass();

类型“Microsoft.Office.Interop.Excel.ApplicationClass”未定义构造函数    
无法嵌入互操作类型“Microsoft.Office.Interop.Excel.ApplicationClass”。请改用适用的接口。

解决办法是将引用的DLL:Microsoft.Office.Interop.Excel;的嵌入互操作类型改为false,就可以了。

 

转载于:https://www.cnblogs.com/maomiyouai/p/3636560.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java接口是一种特殊的抽象类,它只定义了一组方法的声明,而没有具体的实现。接口可以看成是一种规范或者约定,它规定了一些方法的名称、参数类型和返回值类型,但是不指定具体的实现方式。接口可以被类实现,一个类可以实现多个接口,从而实现多个规范的约束。 要实现一个接口,需要使用"implements"关键字,类中必须实现接口中声明的所有方法。例如,假设有一个名为"Runnable"的接口,它定义了"run"方法,可以使用如下方式实现该接口: ``` class MyRunnable implements Runnable { public void run() { // 实现run方法的具体逻辑 } } ``` 接口本身不能实例化,因为它只是一组方法的声明,没有具体的实现。但是可以定义一个实现了接口的类的对象,然后使用该对象来调用接口中的方法。例如,假设有一个名为"Runnable"的接口,可以定义一个实现了该接口的类的对象,并调用该对象的run方法: ``` Runnable r = new MyRunnable(); // 定义一个实现了Runnable接口的类的对象 r.run(); // 调用run方法 ``` 如果想要实现一个接口的对象,可以使用匿名内部类来实现。例如,假设有一个名为"Runnable"的接口,可以使用如下方式创建一个实现该接口的对象: ``` Runnable r = new Runnable() { public void run() { // 实现run方法的具体逻辑 } }; r.run(); // 调用run方法 ``` 这里使用了一个匿名内部类来实现Runnable接口,并创建了一个实现该接口的对象。因为该对象没有具体的类名,所以称之为匿名对象。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值