VB.NET overload()运算符

Pik*_*ack 7 vb.net brackets

我是VB.NET的新手,并且搜索一个复制DataRow行为的方法.在VB.NET中我可以写这样的东西:

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

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

Bjø*_*sjå 7

它不是一个重载运算符,这称为默认属性.

"类,结构或接口最多可以将其属性中的一个指定为默认属性,前提是该属性至少使用一个参数.如果代码在未指定成员的情况下引用类或结构,则Visual Basic将解析该引用到默认属性." - MSDN -

无论是DataRowCollection类和DataRow类有一个名为默认属性Item.

            |       |
table.Rows.Item(0).Item("a value") = "another value"
Run Code Online (Sandbox Code Playgroud)

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

table.Rows(0)("a value") = "another value"
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

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

f(0) = "A"
Run Code Online (Sandbox Code Playgroud)

鉴于上面的示例,您可以使用字符串类的默认属性来获取指定位置的字符.

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