Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is it possible to create a new instance of a COM interface?

I don't have very much background regarding COM nor coclasses, so I don't quite understand why I can use the new operator with an interface. From a language/framework-agnostic view, it's confusing why this compiles and runs correctly:

using Microsoft.Office.Interop.Excel;

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

Inspecting Application in Visual Studio 2010 shows me:

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
    {
    }
}

What is going on behind the scenes?

like image 830
ide Avatar asked Feb 09 '11 23:02

ide


1 Answers

This is only possible for COM interfaces, I believe. Marc Gravell has an explanation here.

The short answer is that a COM interface can be paired with a "default" implementation class, so that when you "instantiate" the interface you're actually creating an instance of that default implementation class. In the case of the Application interface in your example, that appears to be ApplicationClass.

like image 157
Dan Tao Avatar answered Sep 18 '22 15:09

Dan Tao