перегруженные методы
Хотя .NET поддерживает перегруженные методы, интерфейс IDispatch полагается исключительно на имя метода для привязки, а не на полную сигнатуру метода. Поэтому он не способен поддерживать перегруженные методы. Однако для предоставления доступа к перегруженным методам типа Tlbexp.exe украшает имена перегруженных методов порядковым номером, чтобы каждое имя метода было уникальным.
Следующие управляемые и неуправляемые подписи показывают включение чисел:
Управляемая подпись
interface INew { public:
void DoSomething();
void DoSomething(short s);
void DoSomething(short l);
void DoSomething(float f);
void DoSomething(double d);
}
Неуправляемая подпись
interface INew {
void DoSomething();
void DoSomething_2(short s);
void DoSomething_3(short l);
void DoSomething_4(float f);
void DoSomething_5(double d);
}
Сигнатура COM для методов отображается в виде одного метода DoSomething, за которым следует последовательность декорированных методов DoSomething_x, где x начинается с 2 и увеличивается для каждой перегруженной формы метода. Обратите внимание, что некоторые из перегруженных методов могут быть унаследованы от базового типа. Тем не менее, нет никакой гарантии, что перегруженные методы будут иметь то же число, что и расширенная версия типа .
Хотя клиенты .NET могут использовать перегруженную форму метода, клиенты COM должны иметь доступ к оформленным методам. Браузеры объектов отображают все формы декорированного метода с сигнатурой метода, чтобы вы могли выбрать правильный метод. Клиент с поздней привязкой может также вызвать IDispatch :: GetIdsOfNames , передав ему оформленное имя для получения DispID любого перегруженного метода.