Vous ne créez pas une instance de l'interface CustomXMLSchemaCollection
mais une instance de la coclasse CustomXMLSchemaCollectionClass
.
La définition de l'interface CustomXMLSchemaCollection
est:
[Guid("000CDB02-0000-0000-C000-000000000046")]
[CoClass(typeof(CustomXMLSchemaCollectionClass))]
public interface CustomXMLSchemaCollection : _CustomXMLSchemaCollection
{
}
Cela signifie que le coclasse désigné qui implémente l'interface est CustomXMLSchemaCollectionClass
. Ma conjecture est que lorsque le compilateur C# voit la nouvelle interface pour CustomXMLSchemaCollection
il le traduit pour créer une instance COM du CustomXMLSchemaCollectionClass
en fonction des attributs fournis avec l'interface.
Après avoir écrit cet exemple simple:
namespace ConsoleApplication2
{
using System;
using Office = Microsoft.Office.Core;
class Program
{
static void Main(string[] args)
{
Office.CustomXMLSchemaCollection test = new Office.CustomXMLSchemaCollection();
}
}
}
Je viens couru ildasm et obtenir le MSIL suivant:
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// Code size 8 (0x8)
.maxstack 1
.locals init ([0] class [Interop.Microsoft.Office.Core]Microsoft.Office.Core.CustomXMLSchemaCollection test)
IL_0000: nop
IL_0001: newobj instance void [Interop.Microsoft.Office.Core]Microsoft.Office.Core.CustomXMLSchemaCollectionClass::.ctor()
IL_0006: stloc.0
IL_0007: ret
} // end of method Program::Main
Comme vous pouvez le voir la classe qui est construit est CustomXMLSchemaCollectionClass
pour prouver mon hypothèse de départ .
OK COM Magic à nouveau au travail. - On dirait que l'attribut CoClass est la clé de ce comportement hors-piste. THX – Gishu