公开COM vb.net类的继承成员

时间:2008-11-03 19:57:37

标签: vb.net inheritance com

我有两个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

当我通过VB6引用编译的DLL时,Class2只暴露sProperty2。如何通过COM访问基类(sProperty1)的继承属性?

2 个答案:

答案 0 :(得分:1)

这似乎回答了你的问题:

导出继承层次结构

托管类层次结构在作为COM对象公开时变平。例如,如果使用成员定义基类,然后在作为COM对象公开的派生类中继承基类,则在COM对象中使用派生类的客户端将无法使用继承的成员。基类成员只能作为基类的实例从COM对象访问,并且只有在基类也被创建为COM对象时才能访问。

从这里采取:Troubleshooting Interoperability

答案 1 :(得分:0)

我会猜测,因为我没有达到.NET的速度

我想你的声明是采用Class2的公共方法并从中创建一个COM接口。它只接受Class2上的方法(和属性)而不是继承的方法(否则你将获得所有公共方法一直到你的基类)。

解决方案可能是将Class1声明为COM类(可以将其标记为私有),然后指定Class2的COM接口从Class1的COM interfaceid继承。

像shoudl那样的事情可以解决问题。