首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VB6属性Item.VB_UserMemId =0的VB.NET等效项

VB6属性Item.VB_UserMemId =0的VB.NET等效项
EN

Stack Overflow用户
提问于 2014-06-13 05:09:42
回答 1查看 821关注 0票数 7

我已经将一个类从VB6升级到VB.NET,以便通过COM在Excel中使用。

在VB6中,我在类MyScalars中定义了如下属性:

代码语言:javascript
复制
Public Property Get Item(vntIndexKey As Variant) As MyScalar
Attribute Item.VB_UserMemId = 0
    Set Item = mCol(vntIndexKey)
    ...
End Property

这似乎使得我可以在Excel VBA中访问此属性,而无需指定它(因此类似于默认属性):

代码语言:javascript
复制
Dim oOut As Object
Set oOut = MyScalars(Range("E10").Value)

在VB.NET中是否有一个等效的属性可以做到这一点?我尝试了以下方法,但在VBA中显示错误:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2014-07-29 23:36:00

Govert的回答是正确的。COM IDispatch接口的所有成员在从.NET转换为COM时都会自动标记为DISPID值。这个自动过程的唯一例外是值0,它是为类的默认成员保留的。如果不设置dispid,则在移植到COM时,.NET类的默认成员是::ToString方法。在您的示例中:

代码语言:javascript
复制
< DispId(0) > _
Public ReadOnly Property Item(ByVal vntIndexKey As String) As MyScalar

End Property 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24193950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档