loop thru list of functions?

M

Marc Miller

Hi all,

I need to store a list of modules.functions() in an array
and then loop thru the array and call the functions. I
have not been able to get any code to work.

Here's what I need to do:

dim myArr(3) as string
myArr(0) = "MyModA.Func1()"
myArr(2) = "MyModA.Func2()"
myArr(3) = "MyModB.Func1()"
myArr(4) = "MyModB.Func2()"

dim iCnt, iRet as integer

FOR iCnt = 0 TO myArr.Length -1
iRet = myArr(0)
NEXT iCnt

I know why this doesn't work, but I
don't know how to figure out how to approach it.

Any help will be much appreciated.

Thanks,
Marc Miller
 
B

Brian Tkatch

Marc said:
Hi all,

I need to store a list of modules.functions() in an array
and then loop thru the array and call the functions. I
have not been able to get any code to work.

Here's what I need to do:

dim myArr(3) as string
myArr(0) = "MyModA.Func1()"
myArr(2) = "MyModA.Func2()"
myArr(3) = "MyModB.Func1()"
myArr(4) = "MyModB.Func2()"

dim iCnt, iRet as integer

FOR iCnt = 0 TO myArr.Length -1
iRet = myArr(0)
NEXT iCnt

I know why this doesn't work, but I
don't know how to figure out how to approach it.

Any help will be much appreciated.

Thanks,
Marc Miller

System.Reflection should be able to list all the functions in a module.

As for calling them, i have no idea. Can Delegates be used somehow?

B.
 
J

Jim Wooley

I need to store a list of modules.functions() in an array and then
loop thru the array and call the functions. I have not been able to
get any code to work.

Here's what I need to do:

dim myArr(3) as string
myArr(0) = "MyModA.Func1()"
myArr(2) = "MyModA.Func2()"
myArr(3) = "MyModB.Func1()"
myArr(4) = "MyModB.Func2()"
dim iCnt, iRet as integer

FOR iCnt = 0 TO myArr.Length -1
iRet = myArr(0)
NEXT iCnt
I know why this doesn't work, but I
don't know how to figure out how to approach it.
Any help will be much appreciated.

Thanks,
Marc Miller

Below is a sample implementation using delegates. You will need to translate
it to use your objects and methods. The delegate scheme should be more performant
as it does not need to use reflection, but rather has direct pointers to
the method calls. Also, notice that the methods added to the list are strongly
typed rather than being latebound as strings in your example. Note that if
you need to pass parameters to the methods, things start to get a bit more
tricky. This should give you enough to get started though.

Public Class MyApplication
<STAThread()> _
Public Shared Sub Main()
Dim tester As New MyDelegates
Dim methodList As New List(Of SampleDelegate)
methodList.Add(AddressOf tester.Test1)
methodList.Add(AddressOf tester.Test2)

For Each method As [Delegate] In methodList
method.Method.Invoke(tester, Nothing)
Next

Console.ReadLine()
End Sub
End Class

Public Class MyDelegates
Public Sub Test1()
Console.WriteLine("Testing 1")
End Sub
Public Sub Test2()
Console.WriteLine("Testing 2")
End Sub
End Class

Public Delegate Sub SampleDelegate()


Jim Wooley
http://devauthority.com/blogs/jwooley/default.aspx
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top