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 

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

 < DispId(0) > _ Public ReadOnly Property Item(ByVal vntIndexKey As String) As MyScalar End Property