C# подвергается воздействию COM – наследование интерфейсаC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 C# подвергается воздействию COM – наследование интерфейса

Сообщение Anonymous »

Предположим, у меня есть класс BaseClass, реализующий IBaseClass

Затем у меня есть интерфейс IClass, который наследует IBaseClass.

Тогда у меня есть класс с именем class, который реализует IClass.

Например:

Код: Выделить всё

[ComVisible(true), InterfaceType(ComInterfaceType.IsDual), Guid("XXXXXXX")]
public interface IBaseClass
{
[PreserveSig]
string GetA()
}

[ComVisible(true), InterfaceType(ComInterfaceType.IsDual), Guid("XXXXXXX")]
public interface IClass : IBaseClass
{
[PreserveSig]
string GetB()
}

[ComVisible(true), ClassInterface(ClassInterfaceType.None), Guid("XXXXXXX")]
public class BaseClass : IBaseClass
{
public string GetA() { return "A"; }
}

[ComVisible(true), ClassInterface(ClassInterfaceType.None), Guid("XXXXXXX")]
public class Class : BaseClass, IClass
{
public string GetB() { return "B"; }
}
При доступе к COM, если я создаю экземпляр «Класса», я не могу вызвать GetA().

При просмотре моего IDL в файле .tlb мой интерфейс IClass выглядит так:

Код: Выделить всё

[
odl,
uuid(XXXXXXXXXXXXXXXXXXXXX),
version(1.0),
dual,
oleautomation,

]
interface IClass : IDispatch {
[id(0x60020000)]
BSTR GetB();
}
Это даже не похоже, что IClass является производным от IBaseClass!

Если я уберу, откуда происходит IClass IBaseClass и просто добавьте методы в интерфейс, все работает.

Как я могу заставить C# включить это наследование в COM? Я бы не стал повторно реализовывать интерфейсы, если могу их наследовать.

ДЕРЬ: проверьте эту ссылку. Ограничение .Net COM

Если у кого-то есть ответ на вопрос, почему это так, или лучший обходной путь, чем копирование и вставка в мой «производный» интерфейс, дайте мне знать. Если нет, то отмечу ответ через пару дней.

Подробнее здесь: https://stackoverflow.com/questions/186 ... nheritance
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»