How is it possible to initialize an interface?

It was an interop ability of COM

Microsoft.Office.Excel API including the Application class, are written in C++

Due to architectural in C++ are more freedom, initialize an interface is needed in some case


.NET uses CoClass attribute on a COM object to workaround with initiate an interface

C# wont allow to initiate an interface, but with a CoClass attribute, the interface initialization can be routed to the class CoClass

(example code worth thousand words) So lets reproduce this workaround:

[ComImport] // pretend as a COM class
[Guid("000208D5-0000-0000-C000-000000000046")] // put it randomly just to fool the ComImport
public interface ISquirrel
     string Foo();

public class SugarGlider : ISquirrel
    public string Foo(){ return "Bar"; }

You can now initiate the interface by new ISquirrel()

Full example and runs online:

The magic is happening because of the CoClass attribute. It declares that the interface Application is to be implemented by ApplicationClass

That’s why the compiler allows Application excel = new Application(); since it can infer what class to instantiate (i.e. ApplicationClass)

What does the C# CoClass attribute do?

How does the C# compiler detect COM types?

It uses CoClass attribute, which is a COM concept. That attribute allows you tell the compiler that your interface will be implemented by Application class, thus allows you to instantiate the interface like that.