如何在VB.NET中声明默认索引属性,以便可以从VBScript调用?
我已尝试使用
<DispId(0)> _
Public ReadOnly Property Item(ByVal idx As Integer) As ...
但是VBScript会返回错误消息
参数数量错误或属性分配无效 错误代码800A01C2
如果我从VB.NET公开普通属性(非索引),则不会发生此错误。
以下是一个示例:
“Class1.vb:
Public Class Class1
Public ReadOnly Property Dogs() As Dogs
Get
Return New Dogs()
End Get
End Property
End Class
“Dogs.vb:
Imports System.Runtime.InteropServices
Public Class Dogs
<DispId(0)> _
Public ReadOnly Property Item(ByVal idx As Integer) As Dog
Get
Return New Dog
End Get
End Property
End Class
“Dog.vb:
Public Class Dog
Public ReadOnly Property Name() As String
Get
Return "Fido"
End Get
End Property
End Class
的VBScript:
Set obj = CreateObject("FmuComTest.Class1")
MsgBox obj.Dogs.Item(0).Name ' this works
MsgBox obj.Dogs(0).Name ' error message
访问默认的索引属性Dogs.Item(idx)会导致错误消息。
答案 0 :(得分:2)
这篇MSDN博文可能会对这个问题有所了解。似乎VBScript&amp; COM对于如何调用默认值很挑剔。
http://blogs.msdn.com/ericlippert/archive/2005/08/30/458051.aspx
答案 1 :(得分:0)
在传统的VB中,我认为用于默认属性的ID是-1。不过,我不知道这对于DispId是否有任何意义。
答案 2 :(得分:0)
您需要将该属性声明为Default
属性。您还需要省略DispId
属性。例如:
Public Class Dogs
Default Public ReadOnly Property Item(index As Integer) As Dog
Get
Return New Dog()
End Get
End Property
End Class
编译器会自动将DISPID 0分配给默认属性,因此不需要在属性中明确说明它。