VB.NET重载()运算符

8

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

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

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


3
索引器?[在 Visual Basic .NET 中如何创建索引器属性]本文介绍了如何在 Visual Basic .NET 中创建索引器属性,该属性可用于类的实例化对象中。通过使用索引器属性,可以使类的对象更像数组,这样就可以使用类似于访问数组中元素的语法来访问对象属性。 - Alex K.
2
()不是运算符,它是访问一组元素的方式。你示例中的第二个集合是Rows(0)的单元格或项集合。 - Ňɏssa Pøngjǣrdenlarp
1个回答

8

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

"一个类、结构或接口最多可以指定其一个属性作为默认属性,前提是该属性至少需要一个参数。如果代码引用一个类或结构而没有指定成员,则 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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接