一直认为接口是不能实例化的,但是下面的代码为啥不报错?
using Microsoft.Office.Interop.Excel; using System; namespace Test { class Program { static void Main(string[] args) { Application a = new Application(); Console.ReadKey(); } } }
解决方案
15
对于 COM 接口,实际上使用 COM GUID 找到系统注册表中的组件,然后以 .net 封装方式来与COM 层通讯。这并不是真正的去实例化托管对象,而只是实例化一个通用的 COM 代理。实际上这里没有 .net framework 中的托管对象可实例化。
15
随便搜了一个帖子,本人没有看内容,简单地“扫了”2秒钟。你可以从这类文章中本人搜资料。http://q.cnblogs.com/q/28231/
基本上,表面上看是 new Application(),而c# 实际上编译为去启动以个跨进程的 COM 代理机制,而不是普通的进程内托管对象实例化方法。
基本上,表面上看是 new Application(),而c# 实际上编译为去启动以个跨进程的 COM 代理机制,而不是普通的进程内托管对象实例化方法。
10
你在上面文章后边的例子中,就可以看到
new 一个COM/GUID声明的接口();
这样的语法应用。
60
语法糖而已
Application头上有一个叫ComImport的特性
和它同一个命名空间里的东西通常都能违反自然规律
https://msdn.microsoft.com/zh-cn/library/system.runtime.interopservices.comimportattribute(v=vs.110).aspx
Application头上有一个叫ComImport的特性
和它同一个命名空间里的东西通常都能违反自然规律
https://msdn.microsoft.com/zh-cn/library/system.runtime.interopservices.comimportattribute(v=vs.110).aspx