Хм, в этом есть какой-то смысл, COM - это чисто интерфейсное программирование, и фактическая реализация интерфейсов должна быть скрыта.Реализация интерфейсных методов явно дает вам это автоматически, потому что они не могут быть публичными.
На самом деле делать это совершенно бессмысленно, вы можете (и должны) просто применить атрибут [ClassInterface(ClassInterfaceType.None)]
к классу.Это само по себе гарантирует, что реализация не будет представлена, видны только интерфейсы, реализованные классом.Реализация методов интерфейса явно недостаточно хороша.Потому что вы не можете скрыть тот факт, что ваш класс наследует System.Object.Он предоставляет четыре открытых метода Object и помещает ссылку на mscorlib.tlb в вашу библиотеку типов, ссылку, которую настоящий COM-клиент никогда не будет использовать.Это почти всегда будет работать, потому что вероятность того, что компилятор, который использует ваш класс, работает на машине, на которой не установлен .NET, довольно мала.Но, тем не менее, очень отвратительно, это на самом деле не требуется.Только тот компьютер, который использует , нуждается в установке класса.
Только не делайте этого.Объявите интерфейсы, которые вы реализуете, присвойте им атрибут [InterfaceType(ComInterfaceType.InterfaceIsDual)]
, чтобы они могли использоваться как с ранним, так и с поздним ограничением.И скрыть фактическую реализацию их с помощью [ClassInterface(ClassInterfaceType.None)]
.Единственный разумный способ.