Вы создаете не экземпляр интерфейса CustomXMLSchemaCollection
, а экземпляр класса CustomXMLSchemaCollectionClass
.
Определение для CustomXMLSchemaCollection
интерфейса:
[Guid("000CDB02-0000-0000-C000-000000000046")]
[CoClass(typeof(CustomXMLSchemaCollectionClass))]
public interface CustomXMLSchemaCollection : _CustomXMLSchemaCollection
{
}
Это означает, что назначенным классом, который реализует интерфейс, является CustomXMLSchemaCollectionClass
. Я предполагаю, что когда компилятор C # видит новый интерфейс для CustomXMLSchemaCollection
, он переводит его для создания экземпляра COM CustomXMLSchemaCollectionClass
на основе атрибутов, предоставленных интерфейсом.
После написания этого простого примера:
namespace ConsoleApplication2
{
using System;
using Office = Microsoft.Office.Core;
class Program
{
static void Main(string[] args)
{
Office.CustomXMLSchemaCollection test = new Office.CustomXMLSchemaCollection();
}
}
}
Я только что запустил ildasm и получил следующий MSIL:
.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
Как видите, построенный класс CustomXMLSchemaCollectionClass
доказывает мое первоначальное предположение.