【问题标题】:can't access indexer of a property in VB.Net无法访问 VB.Net 中属性的索引器
【发布时间】:2012-05-11 09:43:15
【问题描述】:

我有一个属性Cmd定义如下

Private _cmd As ADODB.Command

Public ReadOnly Property Cmd() As ADODB.Command
    Get
        Cmd = _cmd
    End Get
End Property

但是,当我尝试这样使用它时:

y = x.Cmd("abc")

我明白了:

重载解析失败,因为没有可访问的“参数”接受这个 参数数量。

但是,这是可行的:

y = (x.Cmd)("abc")

我可以更改我的属性定义以使用户不需要括号吗?

【问题讨论】:

  • 该类是否继承自另一个类?有更多的索引器吗?

标签: vb.net


【解决方案1】:

除了 binarycoder 的解决方案,我建议你另一种。如果您想以这种方式使用您的代码:

y = x.Cmd("abc")

您可以将 Cmd 属性更改为如下所示:

Public ReadOnly Property Cmd(ByVal parameterName As String) As ADODB.Command
        Get
            Return _cmd.Parameters(parameterName)
        End Get
End Property

希望对你有帮助!

【讨论】:

    【解决方案2】:

    我可以更改我的属性定义吗 用户不需要 括号?

    没有。问题的症结在于默认属性 (Parameters) 不是索引属性,而是返回一个 ADODB.Parameters 对象。虽然ADODB.Parameters 已索引Item 属性,但它太深了一层。由于您无法更改ADODB,您可以考虑添加一个辅助方法。然后,您可以使用此方法代替您的属性。

    Public Function CmdParameter(ByVal parameterName As String) As ADODB.Parameter
        Return Cmd.Parameters(parameterName)
    End Function
    

    【讨论】:

      猜你喜欢
      • 2016-05-09
      • 2011-12-10
      • 2013-01-05
      • 2014-09-19
      • 1970-01-01
      • 2018-10-17
      • 2023-03-07
      • 2017-09-15
      • 1970-01-01
      相关资源
      最近更新 更多