接口不能实例化?
IEngineFeatureSnapAgent featureSnapAgent = new EngineFeatureSnap();
虽然明明知道,接口是不能实例化的,但是我今天又看到了将接口new的语句,而且代码可以正常运行,没有任何错误。第一次见到将接口new是在将datagridview里的数据导入excel里时:
Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
而且也能正常运行。
真是搞不懂,明明接口不能实例化,那为什么却能像实例化类一样实例化接口呢???而且完全正常使用。这到底是“实例化”吗??
[解决办法]
那是 COM 包装过了的。。。和托管对象不一样。
[解决办法]
COM的接口是通过包装实例化,.net 做了些翻译。
Microsoft.Office.Interop.Excel 的定义:
public interface Application : _Application, AppEvents_Event
[解决办法]
因为EngineFeatureSnap类 实现了 IEngineFeatureSnapAgent 接口。
通过 IEngineFeatureSnapAgent featureSnapAgent = new EngineFeatureSnap(); 这句话 对象featureSnapAgent 就可以 调用接口IEngineFeatureSnapAgent 里定义的方法和属性了。
如果这个类 还实现了别的接口 那么可以通过query interface 调用别的接口的方法和属性了。
[解决办法]