2014-10-20 13 views
6

Tôi mới dùng VB.NET và tìm kiếm phương pháp sao chép hành vi của một DataRow chẳng hạn. Trong VB.NET tôi có thể viết một cái gì đó như thế này:VB.NET overload() operator

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

Bây giờ tôi làm cách nào để truy cập một thành viên trong lớp của tôi bằng dấu ngoặc vuông? Tôi nghĩ rằng tôi có thể quá tải() Điều hành nhưng điều này có vẻ không phải là câu trả lời.

+3

Lập chỉ mục? [Cách tạo thuộc tính chỉ mục trong Visual Basic .NET] (http://support.microsoft.com/kb/311323) –

+2

'()' không phải là toán tử. đó là cách truy cập vào bộ sưu tập của mọi thứ. tập thứ hai trong ví dụ của bạn là thu thập các ô hoặc các mục cho 'Hàng (0)' – Plutonix

Trả lời

6

Nó không phải là toán tử quá tải, được gọi là default property.

"Lớp, cấu trúc hoặc giao diện có thể chỉ định nhiều nhất một thuộc tính của nó làm thuộc tính mặc định, miễn là thuộc tính đó có ít nhất một tham số. thành viên, Visual Basic giải quyết tham chiếu đó đến thuộc tính mặc định. " - MSDN -

Cả lớp DataRowCollection và lớp DataRow có một tài sản mặc định tên Item.

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

này cho phép bạn viết mã mà không cần xác định Item thành viên:

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

Dưới đây là một ví dụ đơn giản của một lớp tùy chỉnh với một tài sản mặc định:

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" 

Cho ví dụ trên, bạn có thể sử dụng thuộc tính mặc định của lớp chuỗi để có được một ký tự ở vị trí được chỉ định.

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