# An Issue with CLR Delegates

**URL:** <https://www.ruby-forum.com/t/an-issue-with-clr-delegates/169841>\
**Category:** IronRuby\
**Created:** [June 9, 2009, 2:34pm UTC](https://www.ruby-forum.com/t/an-issue-with-clr-delegates/169841 "2009-06-09T14:34:52Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![shayfriedman](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/bbe5ce/32.png) [@shayfriedman](https://www.ruby-forum.com/u/shayfriedman)\
**Post date:** [June 9, 2009, 2:34pm UTC](https://www.ruby-forum.com/t/an-issue-with-clr-delegates/169841/1 "2009-06-09T14:34:52Z")

</div>

Hi,

Today I’m playing with CLR delegates 🙂

I’ve run into a strange behavior.

## Take a look at the next C# block:

## public class Printer { public delegate void PrintValue(string value); }

Assuming the above is the content of assembly.dll, take a look at the  
next IR console output:

* * *

> > > require “assembly.dll”  
> > > =\> true  
> > > p = Printer::PrintValue.new { |x| puts x }  
> > > =\> Printer+PrintValue  
> > > p(“dsfs”)  
> > > “dsfs”  
> > > =\> nil  
> > > d = Printer::PrintValue.new { |x| puts x }  
> > > =\> Printer+PrintValue  
> > > d(“dsfd”)  
> > > :0: undefined method `d’ for main:Object (NoMethodError)

* * *

Why does p work and d doesn’t?

BTW, I see that delegates are converted to something called LightLambda.  
What is that?

## Many thanks! Shay.

[http://www.ironshay.com](http://www.ironshay.com)  
Follow me: [http://twitter.com/ironshay](http://twitter.com/ironshay)

---

<div class="post-metadata">

**Author:** ![shayfriedman](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/bbe5ce/32.png) [@shayfriedman](https://www.ruby-forum.com/u/shayfriedman)\
**Post date:** [June 9, 2009, 7:32pm UTC](https://www.ruby-forum.com/t/an-issue-with-clr-delegates/169841/2 "2009-06-09T19:32:29Z")

</div>

Looks like some odd caching or invalidation. Please file a bug on  
Codeplex.

JD

…there is no try

---

<div class="post-metadata">

**Author:** ![shayfriedman](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/bbe5ce/32.png) [@shayfriedman](https://www.ruby-forum.com/u/shayfriedman)\
**Post date:** [June 9, 2009, 8:58pm UTC](https://www.ruby-forum.com/t/an-issue-with-clr-delegates/169841/3 "2009-06-09T20:58:19Z")

</div>

This is actually correct behavior.

p(“dsfs”) calls Kernel#p with parameter “dsfs”  
d(“dsfs”) attempts to call method “d”, which doesn’t exist.

You need to do p.invoke(“dsfs”) and d.invoke(“dsfs”) to invoke the  
delegates.

Tomas

---

<div class="post-metadata">

**Author:** ![shayfriedman](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/bbe5ce/32.png) [@shayfriedman](https://www.ruby-forum.com/u/shayfriedman)\
**Post date:** [June 9, 2009, 10:26pm UTC](https://www.ruby-forum.com/t/an-issue-with-clr-delegates/169841/4 "2009-06-09T22:26:30Z")

</div>

Well, it doesn’t take much to see these things right away. Just to  
implement a Ruby VM 🙂

Tomas

---

<div class="post-metadata">

**Author:** ![shayfriedman](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/bbe5ce/32.png) [@shayfriedman](https://www.ruby-forum.com/u/shayfriedman)\
**Post date:** [June 9, 2009, 10:07pm UTC](https://www.ruby-forum.com/t/an-issue-with-clr-delegates/169841/5 "2009-06-09T22:07:22Z")

</div>

lol!

Brilliant discovery Tomas!

## Thanks!

[http://www.ironshay.com](http://www.ironshay.com)  
Follow me: [http://twitter.com/ironshay](http://twitter.com/ironshay)
