Extension methods and Curried Delegates
Delegates
Since Extension methods behave like instance method it makes sense that we should be able to create delegates that would accept the instance method signature, to this end we have included Adding an Extension Methods to delegate invocation List
Extension methods can now be used like an instance methods when being added to a delegate invocation list. So for Extension method Bar defined as
static int Bar(this foo f)
{
return f.val;
}
We will now allow delegates that accept the instance method signature to be able to add Extension methods to their invocation list. So for,
delegate int d1();
We can now do
d1 d = f.Bar;
In order to do these the generated IL will look like so
IL_0000: nop
IL_0001: newobj instance void Test.foo::.ctor()
IL_0006: stloc.0
IL_0007: ldloc.0
IL_0008: ldftn int32 Test.Extension::Bar(class Test.foo)
IL_000e: newobj instance void Test.d1::.ctor(object, native int)
Where Test.d1 is the delegate class that we generate. That is I am treating the static method as an instance method and the instance variable is curried to the delegate.
Only Extension methods on reference types are supported for this feature. So you can pass a value type as the instance argument to the extension methods, but as long as its boxed.
I encourage users to try this feature in Beta1 released a few weeks back, and give feedback ...
Comments
Anonymous
May 08, 2007
You've been kicked (a good thing) - Trackback from DotNetKicks.comAnonymous
May 13, 2007
Welcome to the 27th Community Convergence. I use this column to keep you informed of events in the C#Anonymous
May 29, 2007
Overview C# 3.0 introduces many new constructs and opens entirely new ways of thinking and developingAnonymous
February 27, 2008
Sree wrote down some more details on extension methods. The standard functionality is quite easy to use,Anonymous
July 11, 2008
Celexa lexapro dose. Heavy drinking celexa. Celexa. Common withdrawal effects of celexa. Celexa side effects.Anonymous
July 18, 2008
Ultracet. Is ultracet addictive. Ultracet addiction.Anonymous
April 08, 2009
I am not able to understand what are you trying to tell. Can you elaborate little bit?Anonymous
March 18, 2011
I suffer from Fibromyalgia. Although prescribed 8 tablets daily, I typically take 4 if I can get away with it. It's very effective for pain. http://www.genericultracet.com