Programaticly call a method from a different object?

S

schneider

I'm looking for a way to programaticly call a method from a different object
and associate the two objects at runtime.

Example: Object A exist and is unknow, I want object B to be able to call a
method on object A whenever needed.

Like addhandler but I don't know what the method is and must discover it
through reflection.

Maybe something like this:

Public Sub attach(ByVal valueA As Object)

Dim meth() As MethodInfo = value.GetType.GetMethods

Dim btnB As Button = New Button

Dim mitem As MethodInfo = meth(0) 'find the method I want somehow

AddHandler btnB.Click, mitem.[Selected_Method] '???

End Sub

Any ideas would be great.

Thanks,

Schneider
 
G

Guest

Dim obj As Object = Nothing
Dim methods As MethodInfo() = obj.GetType().GetMethods()
Dim method As MethodInfo = FindTheMethodYouWant(methods)
'store class-level reference to "method" and "obj"...
mTheMethod = method
mTheObject = object
AddHandler btnB.Click, AddressOf DoTheMethod
....
end sub

private mTheMethod as Method
private mTheObject as object

sub DoTheMethod()
mTheMethod.Invoke(mTheObject, params) '(whatever the params are)
end sub
 
S

schneider

Thanks Ben,

Was hoping for a cleaner approach, but that will work...

Schneider

Ben said:
Dim obj As Object = Nothing
Dim methods As MethodInfo() = obj.GetType().GetMethods()
Dim method As MethodInfo = FindTheMethodYouWant(methods)
'store class-level reference to "method" and "obj"...
mTheMethod = method
mTheObject = object
AddHandler btnB.Click, AddressOf DoTheMethod
...
end sub

private mTheMethod as Method
private mTheObject as object

sub DoTheMethod()
mTheMethod.Invoke(mTheObject, params) '(whatever the params are)
end sub

schneider said:
I'm looking for a way to programaticly call a method from a different
object
and associate the two objects at runtime.

Example: Object A exist and is unknow, I want object B to be able to call
a
method on object A whenever needed.

Like addhandler but I don't know what the method is and must discover it
through reflection.

Maybe something like this:

Public Sub attach(ByVal valueA As Object)

Dim meth() As MethodInfo = value.GetType.GetMethods

Dim btnB As Button = New Button

Dim mitem As MethodInfo = meth(0) 'find the method I want somehow

AddHandler btnB.Click, mitem.[Selected_Method] '???

End Sub

Any ideas would be great.

Thanks,

Schneider
 
N

Nick Malik [Microsoft]

What is the objective? Do you want to be able to develop a plug-in for your
code, after the system is released, and have your system recognize it?

If so, that's covered loosly by traditional Design Patterns. I would
recommend you investigate the Gang of Four Design Patterns, especially
Strategy, Visitor, and Chain of Responsibility. (good reference on GoF
patterns: http://home.earthlink.net/~huston2/dp/patterns.html )

Once you understand the design patterns that lead to frameworks, go ahead
and dive into a light framwork like Spring.Net. Here's an article on
Dependency Injection in .Net:
http://msdn.microsoft.com/msdnmag/issues/05/09/DesignPatterns/default.aspx


--
--- Nick Malik [Microsoft]
MCSD, CFPS, Certified Scrummaster
http://blogs.msdn.com/nickmalik

Disclaimer: Opinions expressed in this forum are my own, and not
representative of my employer.
I do not answer questions on behalf of my employer. I'm just a
programmer helping programmers.
 
S

schneider

No, I know how to do a plug-in design, and already using it.

Trying to wire two methods together during runtime, similar to addhandler
but method to be called is discovered by reflection.

Currently using the Ben pattern, I just thought I might me missing cleaner
language feature...

Schneider


Nick Malik said:
What is the objective? Do you want to be able to develop a plug-in for
your code, after the system is released, and have your system recognize
it?

If so, that's covered loosly by traditional Design Patterns. I would
recommend you investigate the Gang of Four Design Patterns, especially
Strategy, Visitor, and Chain of Responsibility. (good reference on GoF
patterns: http://home.earthlink.net/~huston2/dp/patterns.html )

Once you understand the design patterns that lead to frameworks, go ahead
and dive into a light framwork like Spring.Net. Here's an article on
Dependency Injection in .Net:
http://msdn.microsoft.com/msdnmag/issues/05/09/DesignPatterns/default.aspx


--
--- Nick Malik [Microsoft]
MCSD, CFPS, Certified Scrummaster
http://blogs.msdn.com/nickmalik

Disclaimer: Opinions expressed in this forum are my own, and not
representative of my employer.
I do not answer questions on behalf of my employer. I'm just a
programmer helping programmers.
--
schneider said:
I'm looking for a way to programaticly call a method from a different
object and associate the two objects at runtime.

Example: Object A exist and is unknow, I want object B to be able to call
a method on object A whenever needed.

Like addhandler but I don't know what the method is and must discover it
through reflection.

Maybe something like this:

Public Sub attach(ByVal valueA As Object)

Dim meth() As MethodInfo = value.GetType.GetMethods

Dim btnB As Button = New Button

Dim mitem As MethodInfo = meth(0) 'find the method I want somehow

AddHandler btnB.Click, mitem.[Selected_Method] '???

End Sub

Any ideas would be great.

Thanks,

Schneider
 
N

Nick Malik [Microsoft]

What's wrong with Visitor or Chain of Responsibility? You can set them up
at runtime.

--
--- Nick Malik [Microsoft]
MCSD, CFPS, Certified Scrummaster
http://blogs.msdn.com/nickmalik

Disclaimer: Opinions expressed in this forum are my own, and not
representative of my employer.
I do not answer questions on behalf of my employer. I'm just a
programmer helping programmers.
--
schneider said:
No, I know how to do a plug-in design, and already using it.

Trying to wire two methods together during runtime, similar to addhandler
but method to be called is discovered by reflection.

Currently using the Ben pattern, I just thought I might me missing cleaner
language feature...

Schneider


Nick Malik said:
What is the objective? Do you want to be able to develop a plug-in for
your code, after the system is released, and have your system recognize
it?

If so, that's covered loosly by traditional Design Patterns. I would
recommend you investigate the Gang of Four Design Patterns, especially
Strategy, Visitor, and Chain of Responsibility. (good reference on GoF
patterns: http://home.earthlink.net/~huston2/dp/patterns.html )

Once you understand the design patterns that lead to frameworks, go ahead
and dive into a light framwork like Spring.Net. Here's an article on
Dependency Injection in .Net:
http://msdn.microsoft.com/msdnmag/issues/05/09/DesignPatterns/default.aspx


--
--- Nick Malik [Microsoft]
MCSD, CFPS, Certified Scrummaster
http://blogs.msdn.com/nickmalik

Disclaimer: Opinions expressed in this forum are my own, and not
representative of my employer.
I do not answer questions on behalf of my employer. I'm just a
programmer helping programmers.
--
schneider said:
I'm looking for a way to programaticly call a method from a different
object and associate the two objects at runtime.

Example: Object A exist and is unknow, I want object B to be able to
call a method on object A whenever needed.

Like addhandler but I don't know what the method is and must discover it
through reflection.

Maybe something like this:

Public Sub attach(ByVal valueA As Object)

Dim meth() As MethodInfo = value.GetType.GetMethods

Dim btnB As Button = New Button

Dim mitem As MethodInfo = meth(0) 'find the method I want somehow

AddHandler btnB.Click, mitem.[Selected_Method] '???

End Sub

Any ideas would be great.

Thanks,

Schneider
 
S

schneider

Look Nick the pattern is not the issue, I know what I want to do, and Ben
seems to understand, it's a language detail.

Either read the prior messages or scram...



Nick Malik said:
What's wrong with Visitor or Chain of Responsibility? You can set them up
at runtime.

--
--- Nick Malik [Microsoft]
MCSD, CFPS, Certified Scrummaster
http://blogs.msdn.com/nickmalik

Disclaimer: Opinions expressed in this forum are my own, and not
representative of my employer.
I do not answer questions on behalf of my employer. I'm just a
programmer helping programmers.
--
schneider said:
No, I know how to do a plug-in design, and already using it.

Trying to wire two methods together during runtime, similar to addhandler
but method to be called is discovered by reflection.

Currently using the Ben pattern, I just thought I might me missing
cleaner language feature...

Schneider


Nick Malik said:
What is the objective? Do you want to be able to develop a plug-in for
your code, after the system is released, and have your system recognize
it?

If so, that's covered loosly by traditional Design Patterns. I would
recommend you investigate the Gang of Four Design Patterns, especially
Strategy, Visitor, and Chain of Responsibility. (good reference on GoF
patterns: http://home.earthlink.net/~huston2/dp/patterns.html )

Once you understand the design patterns that lead to frameworks, go
ahead and dive into a light framwork like Spring.Net. Here's an article
on Dependency Injection in .Net:
http://msdn.microsoft.com/msdnmag/issues/05/09/DesignPatterns/default.aspx


--
--- Nick Malik [Microsoft]
MCSD, CFPS, Certified Scrummaster
http://blogs.msdn.com/nickmalik

Disclaimer: Opinions expressed in this forum are my own, and not
representative of my employer.
I do not answer questions on behalf of my employer. I'm just a
programmer helping programmers.
--
I'm looking for a way to programaticly call a method from a different
object and associate the two objects at runtime.

Example: Object A exist and is unknow, I want object B to be able to
call a method on object A whenever needed.

Like addhandler but I don't know what the method is and must discover
it through reflection.

Maybe something like this:

Public Sub attach(ByVal valueA As Object)

Dim meth() As MethodInfo = value.GetType.GetMethods

Dim btnB As Button = New Button

Dim mitem As MethodInfo = meth(0) 'find the method I want somehow

AddHandler btnB.Click, mitem.[Selected_Method] '???

End Sub

Any ideas would be great.

Thanks,

Schneider
 
K

Keith Patrick

Is the method set that B needs to call a known, finite set? If so, can you
have A's type implement an interface? That's generally how a plug-in is
implemented, but if you're talking about wiring up objects of any type based
on configuration values (I have an app that does this because it has to wire
up a remotable event-listening system but predates WS-*), then you've got to
you reflection to get the MethodInfo and call Invoke. The call is
A.GetType().GetMethod("MethodName").Invoke(...)
 
N

Nick Malik [Microsoft]

You completely missed the point, I'm afraid.

In most cases, reflection is not necessary. A better design removes the
need for the crutch. That's not to say that reflection is somehow bad, but
when used as an alternative to simple, easily described patterns that use
interfaces, declare intent, and are managed by the developer, and not 'self
modifying code', reflection can open the door to a wide array of design
issues that can make maintenance expensive.

I'm not criticizing the code. I'm expressing reservations about the need to
use it.

If a gentleman comes to my door with his arms full of packages, opening the
door is polite. If the packages are on fire, opening the door is quite
inconsiderate and potentially self-destructive. You have asked me to open
the door. I'm smelling smoke.

--
--- Nick Malik [Microsoft]
Enterprise Application Architect
http://blogs.msdn.com/nickmalik

Disclaimer: Opinions expressed in this forum are my own, and not
representative of my employer.
I do not answer questions on behalf of my employer. I'm just a
programmer helping programmers.
--
schneider said:
Look Nick the pattern is not the issue, I know what I want to do, and Ben
seems to understand, it's a language detail.

Either read the prior messages or scram...



Nick Malik said:
What's wrong with Visitor or Chain of Responsibility? You can set them
up at runtime.

--
--- Nick Malik [Microsoft]
MCSD, CFPS, Certified Scrummaster
http://blogs.msdn.com/nickmalik

Disclaimer: Opinions expressed in this forum are my own, and not
representative of my employer.
I do not answer questions on behalf of my employer. I'm just a
programmer helping programmers.
--
schneider said:
No, I know how to do a plug-in design, and already using it.

Trying to wire two methods together during runtime, similar to
addhandler but method to be called is discovered by reflection.

Currently using the Ben pattern, I just thought I might me missing
cleaner language feature...

Schneider


What is the objective? Do you want to be able to develop a plug-in for
your code, after the system is released, and have your system recognize
it?

If so, that's covered loosly by traditional Design Patterns. I would
recommend you investigate the Gang of Four Design Patterns, especially
Strategy, Visitor, and Chain of Responsibility. (good reference on GoF
patterns: http://home.earthlink.net/~huston2/dp/patterns.html )

Once you understand the design patterns that lead to frameworks, go
ahead and dive into a light framwork like Spring.Net. Here's an
article on Dependency Injection in .Net:
http://msdn.microsoft.com/msdnmag/issues/05/09/DesignPatterns/default.aspx


--
--- Nick Malik [Microsoft]
MCSD, CFPS, Certified Scrummaster
http://blogs.msdn.com/nickmalik

Disclaimer: Opinions expressed in this forum are my own, and not
representative of my employer.
I do not answer questions on behalf of my employer. I'm just a
programmer helping programmers.
--
I'm looking for a way to programaticly call a method from a different
object and associate the two objects at runtime.

Example: Object A exist and is unknow, I want object B to be able to
call a method on object A whenever needed.

Like addhandler but I don't know what the method is and must discover
it through reflection.

Maybe something like this:

Public Sub attach(ByVal valueA As Object)

Dim meth() As MethodInfo = value.GetType.GetMethods

Dim btnB As Button = New Button

Dim mitem As MethodInfo = meth(0) 'find the method I want somehow

AddHandler btnB.Click, mitem.[Selected_Method] '???

End Sub

Any ideas would be great.

Thanks,

Schneider
 
S

schneider

No the method is not know, in fact it's unknown user/developer code/library,
and the reflection that I'm using are things used by the framework for
similar things. As I explained earlier, a plug-in pattern does not work for
me in this case, but I use it for other things. This needs to be loosely
bound to be of any value to a developer.

Schneider
 
K

Keith Patrick

In that case, I think GetType().GetMethod().Invoke() would be your best
route. As Nick mentioned in another part of the thread, though, you're
putting a lot of trust into what you're calling, basically becoming an
operating system/runtime in itself, so I'd recommend restricting the
permissions that are allowed in that execution call (run it in a .Net
security-based sandbox within your app)
 

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