MathGroup Archive 2009

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Re: .NET/LINK USER GUIDE Comment: Calling

  • To: mathgroup at smc.vnet.net
  • Subject: [mg105285] Re: [mg105193] Re: .NET/LINK USER GUIDE Comment: Calling
  • From: Todd Gayley <tgayley at wolfram.com>
  • Date: Wed, 25 Nov 2009 23:03:57 -0500 (EST)
  • References: <he893j$q5j$1@smc.vnet.net>

Reagrs,

Your solution is exactly correct, and you can give yourself some 
well-deserved congratulations for figuring it out. You can do 
arbitrarily complicated machinations with generics in .NET/Link 
already, but .NET/Link really needs some added syntax for making 
generics easier to use, as well as more documentation.

One complication for your NETCallGenericStaticMethod function is that 
the GetMethod call fails if the static method has overloads. You can 
work around this by calling GetMethods[] and then iterating through 
the list to find the one you want. I give an example of this, as well 
as some more generics-related techniques, in a notebook I wrote a 
little while ago called "Using LINQ from Mathematica." It is of 
interest to anyone working with generics in .NET/Link, not 
necessarily using LINQ. I have sent this to you separately, and I'd 
be happy to send it to anyone else who is interested. Its content is 
being incorporated into the .NET/Link documentation for future 
versions of Mathematica.

Todd Gayley
Wolfram Research


At 04:47 AM 11/24/2009, wollmich wrote:
>On 21 Nov., 09:41, wollmich <wollm... at gmail.com> wrote:
> > Hi,
> >
> > I've a problem to call a static generic C# method from Mathematica and
> > I don't find any example on the web or in your user guide.http://www.wolf=
>ram.com/learningcenter/tutorialcollection/NETLinkUserG...
> >
> > Calling a non static class (this works):
> > Type1 = LoadNETType["DummyLib.Class1"];
> > Object1 = NETNew[Type1];
> > Object1@Method1[];
> >
> > Calling a static method in a static class (this works):
> > Type2 = LoadNETType["DummyLib.Class2"];
> > Class2`Method2[];
> >
> > Calling a non static but generic class  (this works):
> > Type3 = LoadNETType["DummyLib.Class3`1[[DummyLib.Class1]]"];
> > Object3 = NETNew[Type3];
> > Object3@Method3[];
> >
> > Calling a static generic method in a static class (THIS DOESN'T
> > WORK!!!!) I've no idea how to call it???
> > The method could look like that in C#:
> > C#-Code:
> > namespace DummyLib
> > {
> >     public static class Class4
> >     {
> >         public static T Method4<T>()
> >             where T : new()
> >         {
> >             return new T();
> >         }
> >     }
> >
> > }
> >
> > With NETTypeInfo the method is listet, but I don't no idea how to pass
> > the type parameter?
> > Type4 = LoadNETType["DummyLib.Class4"];
> > NETTypeInfo[Type4];
> >
> > Can somebody please help me. Thanks.
> >
> > Regards Wollmich
>
>I've a solution which works:
>
>NETCallGenericStaticMethod[classtype_ method_, type_, arguments___] :=
>    Module[{m1, m2, t1, t2},
>    t1 = GetTypeObject[classtype];
>    m1 = t1@GetMethod[method];
>    t2 = GetTypeObject[type];
>    m2 = m1@MakeGenericMethod[{t2}];
>    Return[m2@Invoke[Null, arguments]]];
>
>Any other idea?
>
>Reagrs Wollmich



  • Prev by Date: Re: Re: Color depth - Wikipedia, the free
  • Next by Date: Re: Re: Color depth - Wikipedia, the free
  • Previous by thread: Re: computing expectations for probability distributions in mathematica
  • Next by thread: Re: .NET/LINK USER GUIDE Comment: Calling