接口为什么可以用new直接实例化

.Net技术 码拜 9年前 (2016-03-12) 1565次浏览
一直认为接口是不能实例化的,但是下面的代码为啥不报错?

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 代理机制,而不是普通的进程内托管对象实例化方法。

10

你在上面文章后边的例子中,就可以看到

new 一个COM/GUID声明的接口();

这样的语法应用。

60

语法糖而已
Application头上有一个叫ComImport的特性
和它同一个命名空间里的东西通常都能违反自然规律
https://msdn.microsoft.com/zh-cn/library/system.runtime.interopservices.comimportattribute(v=vs.110).aspx

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明接口为什么可以用new直接实例化
喜欢 (0)
[1034331897@qq.com]
分享 (0)