Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / .NET Framework / General / January 2007

Tip: Looking for answers? Try searching our database.

Programaticly call a method from a different object?

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
schneider - 26 Jan 2007 15:14 GMT
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
Ben - 26 Jan 2007 16:25 GMT
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

> I'm looking for a way to programaticly call a method from a different object
> and associate the two objects at runtime.
[quoted text clipped - 24 lines]
>
> Schneider
schneider - 27 Jan 2007 20:39 GMT
Thanks Ben,

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

Schneider

>      Dim obj As Object = Nothing
>      Dim methods As MethodInfo() = obj.GetType().GetMethods()
[quoted text clipped - 43 lines]
>>
>> Schneider
Nick Malik [Microsoft] - 29 Jan 2007 18:17 GMT
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

Signature

--- 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.
[quoted text clipped - 24 lines]
>
> Schneider
schneider - 29 Jan 2007 23:07 GMT
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
[quoted text clipped - 38 lines]
>>
>> Schneider
Nick Malik [Microsoft] - 30 Jan 2007 16:32 GMT
What's wrong with Visitor or Chain of Responsibility?  You can set them up
at runtime.

Signature

--- 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.
--

> No, I know how to do a plug-in design, and already using it.
>
[quoted text clipped - 48 lines]
>>>
>>> Schneider
schneider - 30 Jan 2007 17:00 GMT
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...

> What's wrong with Visitor or Chain of Responsibility?  You can set them up
> at runtime.
[quoted text clipped - 51 lines]
>>>>
>>>> Schneider
Nick Malik [Microsoft] - 31 Jan 2007 08:58 GMT
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.

Signature

--- 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.
--

> 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.
[quoted text clipped - 56 lines]
>>>>>
>>>>> Schneider
Keith Patrick - 31 Jan 2007 00:41 GMT
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(...)
schneider - 31 Jan 2007 15:17 GMT
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

> 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
[quoted text clipped - 3 lines]
> you've got to you reflection to get the MethodInfo and call Invoke.  The
> call is A.GetType().GetMethod("MethodName").Invoke(...)
Keith Patrick - 31 Jan 2007 18:06 GMT
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)

Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.