VB.NET相当于VB6属性Item.VB_UserMemId = 0

我已经从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
戈维特的答复是正确的.
COM IDispatch接口的所有成员都自动标记DISPID值,
从.NET转换为COM时.此自动过程的唯一例外是值0,它是为类的默认成员保留的.如果不设置dispid,则移植到COM时.NET类的默认成员是:: ToString方法.
在你的例子中:
< DispId(0) > _
Public ReadOnly Property Item(ByVal vntIndexKey As String) As MyScalar

End Property

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...