2014-10-20 20 views
6

Sono nuovo in VB.NET e cerco un metodo per copiare il comportamento di un DataRow ad esempio. In VB.NET posso scrivere qualcosa di simile:Operatore VB.NET overload()

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

Ora come posso accedere a un membro della mia classe con staffe? Ho pensato di poter sovraccaricare l'operatore() ma questa sembra non essere la risposta.

+3

Indicizzatore? [Come creare una proprietà dell'indicizzatore in Visual Basic .NET] (http://support.microsoft.com/kb/311323) –

+2

'()' non è un operatore. è come accedere a una raccolta di cose. il secondo set sul tuo esempio è la collezione di celle o elementi per 'Rows (0)' – Plutonix

risposta

6

Non è un operatore di sovraccarico, noto come default property.

"Una classe, struttura o interfaccia può designare al massimo una delle sue proprietà come la proprietà predefinita, purché struttura richiede almeno un parametro. Se il codice fa riferimento a una classe o struttura senza specificare un membro, Visual Basic risolve tale riferimento alla proprietà predefinita. " - MSDN -

Sia la classe e la classe DataRowCollectionDataRow hanno una proprietà predefinita di nome Item.

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

Questo consente di scrivere il codice senza specificare le Item membri:

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

Ecco un semplice esempio di una classe personalizzata con una proprietà di default:

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" 

Dato l'esempio precedente, è possibile utilizzare la proprietà predefinita della classe string per ottenere un carattere nella posizione specificata.

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