我已经将一个类从VB6升级到VB.NET,以便通过COM在Excel中使用。
在VB6中,我在类MyScalars中定义了如下属性:
Public Property Get Item(vntIndexKey As Variant) As MyScalar
Attribute Item.VB_UserMemId = 0
Set Item = mCol(vntIndexKey)
...
End Property这似乎使得我可以在Excel VBA中访问此属性,而无需指定它(因此类似于默认属性):
Dim oOut As Object
Set oOut = MyScalars(Range("E10").Value)在VB.NET中是否有一个等效的属性可以做到这一点?我尝试了以下方法,但在VBA中显示错误:
Default Public ReadOnly Property Item(ByVal vntIndexKey As String) As MyScalar
Get
If mCol.ContainsKey(vntIndexKey) Then
Item = mCol.Item(vntIndexKey)
End If
...
End Property发布于 2014-07-29 23:36:00
Govert的回答是正确的。COM IDispatch接口的所有成员在从.NET转换为COM时都会自动标记为DISPID值。这个自动过程的唯一例外是值0,它是为类的默认成员保留的。如果不设置dispid,则在移植到COM时,.NET类的默认成员是::ToString方法。在您的示例中:
< DispId(0) > _
Public ReadOnly Property Item(ByVal vntIndexKey As String) As MyScalar
End Property https://stackoverflow.com/questions/24193950
复制相似问题