# Dynamic Binding fails if abstract event not implemented

**URL:** <https://www.ruby-forum.com/t/dynamic-binding-fails-if-abstract-event-not-implemented/170817>\
**Category:** IronRuby\
**Created:** [June 23, 2009, 6:12am UTC](https://www.ruby-forum.com/t/dynamic-binding-fails-if-abstract-event-not-implemented/170817 "2009-06-23T06:12:37Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Xerxes\_Battiwalla](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/x/d9b06d/32.png) [@Xerxes\_Battiwalla](https://www.ruby-forum.com/u/Xerxes_Battiwalla)\
**Post date:** [June 23, 2009, 6:12am UTC](https://www.ruby-forum.com/t/dynamic-binding-fails-if-abstract-event-not-implemented/170817/1 "2009-06-23T06:12:37Z")

</div>

Hi - I’ve just downloaded the latest IR source from GitHub and have a  
problem with what looks like a regression from v0.4.

We have an interface defining an event which is implemented by an  
abstract class in C#. In Ruby, we create an implementation of the  
abstract class and call only a subset of methods as we require them.  
The 0.4 version played nicely and would only do the dynamic binding of  
methods we required at the time we called them, however the latest  
version of IR seems to try and bind the event (even though we don’t  
hook up to it) and can’t find an implementation in ruby so it throws a  
TypeLoadException citing the adder for the event does not have an  
implementation.

A reproducible case is pasted below. Hoping someone would be able to  
shed light on whether this is intentional, and if so what we can do to  
implement the event in ruby.

* * *

using System;

namespace HelloWorldApp  
{  
public interface IHelloWorld  
{  
event EventHandler SomeEvent;  
}

```
public abstract class AbstractHelloWorld : IHelloWorld
{
    public abstract event EventHandler SomeEvent;
}

```

}

* * *

require “HelloWorldApp.dll”

class HelloWorlder \< HelloWorldApp::AbstractHelloWorld  
end

@hello\_app = HelloWorlder.new #barf

* * *

D:\source\dotnet\IronRubyInteropBug\>ir ruby\_test.rb  
mscorlib:0:in `_TermCreateClass': Method 'add_SomeEvent' in type 'IronRuby.Classes.AbstractHelloWorld$1' from assembly 'Snippets.scripting, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' does not have an implementation. (System::TypeLoadException) from mscorlib:0:in`CreateTypeNoLock’  
from mscorlib:0:in `CreateType' from c:\IronRuby\ndp\fx\src\Core\Microsoft\Scripting\Actions\DynamicMetaObjectBinder.cs:107:in`Bind’  
from  
c:\IronRuby\ndp\fx\src\Core\Microsoft\Scripting\Actions\CallSiteBinder.cs:85:in  
`BindCore’  
from ruby\_test.rb:6

Any assistance appreciated - cheers!

-xerx

---

<div class="post-metadata">

**Author:** ![Xerxes\_Battiwalla](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/x/d9b06d/32.png) [@Xerxes\_Battiwalla](https://www.ruby-forum.com/u/Xerxes_Battiwalla)\
**Post date:** [June 23, 2009, 6:58am UTC](https://www.ruby-forum.com/t/dynamic-binding-fails-if-abstract-event-not-implemented/170817/2 "2009-06-23T06:58:48Z")

</div>

Definitely a bug. I’ve filed it under  
[http://ironruby.codeplex.com/WorkItem/View.aspx?WorkItemId=1628](http://ironruby.codeplex.com/WorkItem/View.aspx?WorkItemId=1628).

Tomas

---

<div class="post-metadata">

**Author:** ![Xerxes\_Battiwalla](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/x/d9b06d/32.png) [@Xerxes\_Battiwalla](https://www.ruby-forum.com/u/Xerxes_Battiwalla)\
**Post date:** [June 23, 2009, 7:43am UTC](https://www.ruby-forum.com/t/dynamic-binding-fails-if-abstract-event-not-implemented/170817/3 "2009-06-23T07:43:54Z")

</div>

great - thanks for the follow up, Tomas.

Is there a workaround we could use in the meantime? Really keen to get  
Cucumber going 😉

-Xerx

On Tue, Jun 23, 2009 at 2:49 PM, Tomas

---

<div class="post-metadata">

**Author:** ![Xerxes\_Battiwalla](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/x/d9b06d/32.png) [@Xerxes\_Battiwalla](https://www.ruby-forum.com/u/Xerxes_Battiwalla)\
**Post date:** [June 23, 2009, 9:39am UTC](https://www.ruby-forum.com/t/dynamic-binding-fails-if-abstract-event-not-implemented/170817/4 "2009-06-23T09:39:22Z")

</div>

Actually the AbstractHelloWorld is used as a work-around for  
implementing the interface directly in ruby (see  
[http://ironruby.codeplex.com/WorkItem/View.aspx?WorkItemId=772](http://ironruby.codeplex.com/WorkItem/View.aspx?WorkItemId=772)), so  
implementing it in C# gives us no benefit.

I did try (in our codebase, i havent tested this particular example)  
removing the abstract modifier on SomeEvent in AbstractHelloWorld and  
leaving everything else as abstract on the interface, and I get the  
same failure for add\_OnProgress on IronRuby::System::Object.

-Xerx

On Tue, Jun 23, 2009 at 4:51 PM, Tomas

---

<div class="post-metadata">

**Author:** ![Xerxes\_Battiwalla](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/x/d9b06d/32.png) [@Xerxes\_Battiwalla](https://www.ruby-forum.com/u/Xerxes_Battiwalla)\
**Post date:** [June 23, 2009, 9:52am UTC](https://www.ruby-forum.com/t/dynamic-binding-fails-if-abstract-event-not-implemented/170817/5 "2009-06-23T09:52:17Z")

</div>

I’ve been meaning to ask this for a while now.  
Can I implement an event that is defined on an interface because  
whichever  
way I try it just won’t work.

public interface IHaveAnEvent { event EventHandler SomeEvent; }

class EventImplementor  
include IHaveAnEvent

# what now? I can’t find any test cases for interface to see how it

## can be done. end

Met vriendelijke groeten - Best regards - Salutations  
Ivan Porto C.  
Blog: [http://flanders.co.nz](http://flanders.co.nz)  
Twitter: [http://twitter.com/casualjim](http://twitter.com/casualjim)  
Author of IronRuby in Action ([http://manning.com/carrero](http://manning.com/carrero))

---

<div class="post-metadata">

**Author:** ![Xerxes\_Battiwalla](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/x/d9b06d/32.png) [@Xerxes\_Battiwalla](https://www.ruby-forum.com/u/Xerxes_Battiwalla)\
**Post date:** [June 23, 2009, 8:53am UTC](https://www.ruby-forum.com/t/dynamic-binding-fails-if-abstract-event-not-implemented/170817/6 "2009-06-23T08:53:04Z")

</div>

Could you derive from AbstractHelloWorld in C# and implement the  
abstract event and then derive from this derived class in Ruby?

Tomas

---

<div class="post-metadata">

**Author:** ![Xerxes\_Battiwalla](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/x/d9b06d/32.png) [@Xerxes\_Battiwalla](https://www.ruby-forum.com/u/Xerxes_Battiwalla)\
**Post date:** [June 23, 2009, 5:19pm UTC](https://www.ruby-forum.com/t/dynamic-binding-fails-if-abstract-event-not-implemented/170817/7 "2009-06-23T17:19:07Z")

</div>

Ivan Porto carrero wrote:

> I’ve been meaning to ask this for a while now.  
> Can I implement an event that is defined on an interface because  
> whichever  
> way I try it just won’t work.
> 
> public interface IHaveAnEvent { event EventHandler SomeEvent; }
> 
> class EventImplementor  
> include IHaveAnEvent
> 
> # what now? I can’t find any test cases for interface to see how it
> 
> ## can be done. end
> 
> Met vriendelijke groeten - Best regards - Salutations  
> Ivan Porto C.  
> Blog: [http://flanders.co.nz](http://flanders.co.nz)  
> Twitter: [http://twitter.com/casualjim](http://twitter.com/casualjim)  
> Author of IronRuby in Action ([http://manning.com/carrero](http://manning.com/carrero))

I was trying to implement an interface to use OpenRasta from IronRuby  
and ran into the same thing.  
Received the same error as Xerx did above, and assumed it was just a  
limitation of the language at the moment.  
Would be great if we can implement the add\_SomeEvent handlers at some  
point though.

For now I voted for the CodePlex issue Tomas pointed out above.
