Почему возможно создать новый экземпляр интерфейса COM?
Я не очень разбираюсь в COM и Coclasses, поэтому я не совсем понимаю, почему я могу использовать new
оператор с интерфейсом. С точки зрения языка / фреймворка не совсем понятно, почему это компилируется и работает правильно:
using Microsoft.Office.Interop.Excel;
public class ExcelProgram
{
static void Main(string[] args)
{
Application excel = new Application();
}
}
инспектирование Application
в Visual Studio 2010 показывает мне:
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
{
}
}
Что происходит за кулисами?
1 ответ
Решение
Я полагаю, что это возможно только для интерфейсов COM. У Марка Гравелла есть объяснение здесь.
Краткий ответ заключается в том, что интерфейс COM может быть связан с классом реализации "по умолчанию", поэтому, когда вы "создаете экземпляр" интерфейса, вы фактически создаете экземпляр этого класса реализации по умолчанию. В случае с Application
интерфейс в вашем примере, который, кажется, ApplicationClass
,