Предоставление унаследованных членов класса COM vb.net - PullRequest
0 голосов
/ 03 ноября 2008

У меня два класса vb.net:

Public MustInherit Class Class1
    Private m_sProperty1 As String = ""
    Public Property sProperty1() As String
        Get
            Return m_sProperty1
        End Get
        Set(ByVal value As String)
            m_sProperty1 = value
        End Set
    End Property
End Class

<ComClass("classid","interfaceid","eventid")> _
Public Class Class2
    Inherits Class1

    Private m_sProperty2 As String = ""
    Public Property sProperty2() As String
        Get
            Return m_sProperty2
        End Get
        Set(ByVal value As String)
            m_sProperty2 = value
        End Set
    End Property
End Class

Когда я ссылаюсь на скомпилированную DLL через VB6, Class2 предоставляет только sProperty2. Как я могу получить доступ к унаследованному свойству базового класса (sProperty1) через COM?

Ответы [ 2 ]

1 голос
/ 13 февраля 2009

Это похоже на ваш вопрос:

Экспорт иерархий наследования

Иерархии управляемого класса сглаживаются при представлении в виде объектов COM. Например, если вы определяете базовый класс с помощью члена, а затем наследуете базовый класс в производном классе, который представлен как объект COM, клиенты, которые используют производный класс в объекте COM, не смогут использовать унаследованные члены , Члены базового класса доступны из объектов COM только как экземпляры базового класса, и только в том случае, если базовый класс также создан как объект COM.

Взяты отсюда: Устранение неполадок взаимодействия

0 голосов
/ 13 февраля 2009

Я сделаю предположение, потому что я не в курсе .NET

Я бы предположил, что ваша декларация берет ваши открытые методы Class2 и создает из них интерфейс COM. Он будет принимать только методы (и свойства) для Class2, а не наследуемые (в противном случае вы получите все открытые методы вплоть до базового класса).

Решение, вероятно, состояло бы в том, чтобы объявить Class1 также как COM-класс (можно пометить его как закрытый), а затем указать, что COM-интерфейс идентификатора Class2 происходит от COM-интерфейса Class1.

Что-то вроде этого должно сделать свое дело.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...