在IronRuby中更正C#类实例化

时间:2012-10-23 21:52:04

标签: c# ironruby

我编写了以下Ruby代码文件:

require 'MyAssembly.dll'

class MyClass
    def initialize(obj)
        System::Diagnostics::WriteLine('test')
        @var = MyAssembly::Namespace::CSharpClass.new
    end
end

MyClass

CSharpClass是一个具有一个默认构造函数的类。现在,我使用这个文件:

dynamic MyClass = RubyEngine.Execute(script)
//script is a string which contains the aforementioned Ruby code as text
MyClass.@new(some_obj)

请注意,MyClass有一个带有一个参数的构造函数。当我运行程序时,我得到以下异常:ArgumentException - 在最后一个C#代码行中错误的参数数量(0表示1)。

如果我将CSharpClass更改为任何其他名称,则会出现一个异常,即我没有这样的对象(所以我猜测装配加载工作正常)。

现在有趣的部分:如果我将initialize(obj)方法中的第二行更改为

@var = MyAssembly::Namespace::CSharpClass.new(nil)

然后在Debug输出中有一个很长的“test”字符串列表和一个StackOverflowException。所以它看起来像递归MyClass对象实例化,即CSharpClass.new(nil)以某种方式执行MyClass.new(nil)。可能这就是为什么我得到了上面的AgrumentException。

我已尝试过IronRuby 1.0和1.1.3,但无济于事。我错过了什么?

更新

更有趣!现在假设Ruby代码如下所示:

require 'MyAssembly.dll'

class MyClass
    def initialize(a, b)
        @var = MyAssembly::Namespace::CSharpClass.new
    end
end

MyClass.new(0, 0)

如果我尝试使用不同的参数调用CSharpClass.new,我会得到互斥的异常消息:

CSharpClass.new           # wrong number of arguments (0 for 1)
CSharpClass.new(0)        # wrong number of arguments (1 for 2)
CSharpClass.new(0, 0)     # wrong number of arguments (2 for 1)
...
CSharpClass.new(<N args>) # wrong number of arguments (N for 1)

如果有人知道我做错了什么,我会很高兴 - 我真的很想在我的项目中使用IronRuby。

1 个答案:

答案 0 :(得分:0)

嗯,这很好,同时也很糟糕。原来我用以下几行开始了我的文件:

def initialize(obj)
    MyClass.new(obj)
end

即。我在宣布之前使用了MyClass。删除这些行解决了这个问题。当出现问题时,动态代码会产生什么样的异常,这是一个奇迹......