Почему возможно создать новый экземпляр интерфейса 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,

Другие вопросы по тегам