Mega Code Archive

 
Categories / VB.Net / Reflection
 

Get an indexed property value

Imports System Imports System.Reflection Imports System.IO Public Class TestClass     Public Name As String     Private values() As [Object] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}     Default Public Property Item(ByVal index As Integer) As [Object]         Get             Return values(index)         End Get         Set(ByVal Value As [Object])             values(index) = Value         End Set     End Property     Public ReadOnly Property Value() As [Object]         Get             Return "the value"         End Get     End Property     Public Sub New(ByVal initName As String)         Name = initName     End Sub     Public Sub New()         MyClass.New("initialName")     End Sub     Private methodCalled As Integer = 0     Public Shared Sub SayHello()         Console.WriteLine("Hello")     End Sub     Public Sub AddUp()         methodCalled += 1         Console.WriteLine("AddUp Called {0} times", methodCalled)     End Sub     Public Shared Function ComputeSum(ByVal d1 As Double, ByVal d2 As Double) As Double         Return d1 + d2     End Function     Public Shared Sub PrintName(ByVal firstName As [String], ByVal lastName As [String])         Console.WriteLine("{0},{1}", lastName, firstName)     End Sub     Public Sub PrintTime()         Console.WriteLine(DateTime.Now)     End Sub     Public Sub Swap(ByRef a As Integer, ByRef b As Integer)         Dim x As Integer = a         a = b         b = x     End Sub End Class Class Invoke     Public Shared Sub Main()         Dim t As Type = GetType(TestClass)         Dim c As New TestClass()         Dim result As Object         Console.WriteLine("Invoking an indexed property (getting and setting.)")         Dim index As Integer = 3         result = t.InvokeMember("Item", BindingFlags.GetProperty, Nothing, c, New Object() {index})         Console.WriteLine("Item[{0}] == {1}", index, result)         ' BindingFlags.SetProperty         ' Set an indexed property value.         index = 3         t.InvokeMember("Item", BindingFlags.SetProperty, Nothing, c, New Object() {index, "NewValue"})         result = t.InvokeMember("Item", BindingFlags.GetProperty, Nothing, c, New Object() {index})         Console.WriteLine("Item[{0}] == {1}", index, result)     End Sub End Class