Pourquoi est-il possible de créer une nouvelle instance d’une interface COM?

Je n’ai pas beaucoup de connaissances sur COM ni sur les coclasses. Je ne comprends donc pas très bien pourquoi je peux utiliser le new opérateur avec une interface. D’un sharepoint vue agnostique langage / framework, il est difficile de comprendre pourquoi cela comstack et fonctionne correctement:

 using Microsoft.Office.Interop.Excel; public class ExcelProgram { static void Main(ssortingng[] args) { Application excel = new Application(); } } 

L’inspection de l’ Application dans Visual Studio 2010 me montre:

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

Qu’est-ce qui se passe dans les coulisses?

Ceci n’est possible que pour les interfaces COM, je crois. Marc Gravell a une explication ici .

La réponse courte est qu’une interface COM peut être associée à une classe d’implémentation “par défaut”. Ainsi, lorsque vous “instanciez” l’interface, vous créez réellement une instance de cette classe d’implémentation par défaut. Dans le cas de l’interface d’ Application dans votre exemple, cela semble être ApplicationClass .