// test.dll
public interface IDoSomething {
void HelloWorld();
}
public class Foo {
public void Bar(IDoSomething i) {
i.HelloWorld();
}
}
C:\dev>ir
IronRuby 1.0.0.0 on .NET 2.0.50727.3521
Copyright (c) Microsoft Corporation. All rights reserved.
require ‘test.dll’
=> true
class Doer
… include IDoSomething
… def hello_world
… puts “hi”
… end
… end
=> nil
f = Foo.new
=> #Foo:0x000005c
d = Doer.new
=> #Doer:0x000005e
f.Bar(d)
hi
=> nil
From: [email protected]
[mailto:[email protected]] On Behalf Of Tomas M.
Sent: Monday, February 09, 2009 5:46 PM
To: [email protected]
Subject: Re: [Ironruby-core] How to implement a C# interface from Ruby ?
You need to call the method from C# to check whether it is actually
bound to the CLR interface implementation. The method will always be
callable from Ruby.
Tomas
From: [email protected]
[mailto:[email protected]] On Behalf Of Jimmy
Schementi
Sent: Monday, February 09, 2009 5:43 PM
To: [email protected]
Subject: Re: [Ironruby-core] How to implement a C# interface from Ruby ?
How does it fail? Nothing fails for me, but how are you trying to use
this Ruby class?
(test.cs has your c# code in it):
C:\dev>csc.exe /t:library test.cs
Microsoft (R) Visual C# 2008 Compiler version 3.5.30729.715
for Microsoft (R) .NET Framework version 3.5
Copyright (C) Microsoft Corporation. All rights reserved.
C:\dev>ir
IronRuby 1.0.0.0 on .NET 2.0.50727.3521
Copyright (c) Microsoft Corporation. All rights reserved.
require ‘test.dll’
=> true
class Doer
… include IDoSomething
… def hello_world
… puts “hello”
… end
… end
=> nil
Doer
=> Doer
Doer.new
=> #Doer:0x000005c
Doer.new.hello_world
hello
=> nil
~js
From: [email protected]
[mailto:[email protected]] On Behalf Of Thibaut
Barrère
Sent: Monday, February 09, 2009 5:23 PM
To: ironruby-core
Subject: [Ironruby-core] How to implement a C# interface from Ruby ?
Hello again,
I’m playing around with the idea of using IronRuby to implement plugins
for a C#-based system (namely, CruiseControl.Net).
I’m having some difficulties trying to figure out what the correct
syntax for that would be. I’m currently using this to bootstrap the
engine:
var reader = new
StreamReader(“plugin.rb”);
var code = reader.ReadToEnd();
reader.Close();
var engine =
IronRuby.Ruby.CreateEngine();
engine.Execute(code);
The code inside plugin.rb is trying to implement an existing C#
interface:
public interface IDoSomething {
void HelloWorld();
}
I tried:
class Doer
include IDoSomething
def hello_world
puts “hello”
end
end
but it fails. What would be the correct syntax for a Ruby class to
implement this ?
thanks!
– Thibaut