【问题标题】:VB.NET overload () operatorVB.NET 重载() 运算符
【发布时间】:2014-10-20 11:34:16
【问题描述】:

我是 VB.NET 的新手,我正在寻找一种方法来复制 DataRow 的行为。 在 VB.NET 中我可以这样写:

Dim table As New DataTable
'assume the table gets initialized
table.Rows(0)("a value") = "another value"

现在如何使用方括号访问我的班级成员?我以为我可以重载 () 运算符,但这似乎不是答案。

【问题讨论】:

标签: vb.net brackets


【解决方案1】:

它不是重载运算符,这称为default property

“一个类、结构或接口最多可以将它的一个属性指定为默认属性,前提是该属性至少有一个参数。如果代码在没有指定成员的情况下引用了一个类或结构, Visual Basic 解析对默认属性的引用。” - MSDN -

DataRowCollection 类和 DataRow 类都有一个名为 Item 的默认属性。

            |       |
table.Rows.Item(0).Item("a value") = "another value"

这允许您在不指定Item 成员的情况下编写代码:

table.Rows(0)("a value") = "another value"

这是一个带有默认属性的自定义类的简单示例:

Public Class Foo

    Default Public Property Test(index As Integer) As String
        Get
            Return Me.items(index)
        End Get
        Set(value As String)
            Me.items(index) = value
        End Set
    End Property

    Private ReadOnly items As String() = New String(2) {"a", "b", "c"}

End Class

Dim f As New Foo()
Dim a As String = f(0)

f(0) = "A"

根据上面的例子,你可以使用字符串类的默认属性来获取指定位置的字符。

f(0) = "abc"
Dim c As Char = f(0)(1) '<- "b" | f.Test(0).Chars(1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 2016-02-19
    • 1970-01-01
    相关资源
    最近更新 更多