我没有很多关于COM和coclasses的背景知识,所以我不太明白为什么我可以在界面上使用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
{
}
}
幕后发生了什么?
答案 0 :(得分:5)
我认为这只适用于COM接口。 Marc Gravell有一个解释here。
简短的回答是COM接口可以与“默认”实现类配对,因此当您“实例化”接口时,您实际上正在创建该默认实现类的实例。对于示例中的Application
界面,该界面似乎是ApplicationClass
。