9

我没有太多关于 COM 或 coclass 的背景知识,所以我不太明白为什么我可以将new操作符与接口一起使用。从与语言/框架无关的角度来看,为什么它可以正确编译和运行令人困惑:

using Microsoft.Office.Interop.Excel;

public class ExcelProgram
{
    static void Main(string[] args)
    {
        Application excel = new Application();
    }
}

在 Visual Studio 2010 中检查Application显示:

using System.Runtime.InteropServices;

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

幕后发生了什么?

4

1 回答 1

5

我相信这仅适用于 COM 接口。Marc Gravell 在这里有一个解释。

简短的回答是 COM 接口可以与“默认”实现类配对,因此当您“实例化”接口时,您实际上是在创建该默认实现类的实例。在您示例中的界面的情况下Application,这似乎是ApplicationClass.

于 2011-02-09T23:37:22.200 回答