正确的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具有一个带有一个参数的构造函数。当我运行程序时,我会得到以下异常:grignt exception-错误的参数数(0 for 1)在最后一个C#代码行。

如果我将csharpclass更改为任何其他名称,则有一个例外,说我没有这样的对象(所以我猜汇编加载可以正常工作)。

现在有趣的部分:如果我将初始化(OBJ)方法中的第二行更改为

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

然后,在调试输出中有一长串"测试"字符串和一个stackoverflowException。因此,它看起来像是递归的myclass对象实例化,即csharpclass.new(nil)以某种方式执行为myclass.new(nil)。可能这就是为什么我在上面获得了AgrumentException。

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

update

更有趣!现在假设红宝石代码看起来像这样:

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。

好吧,这同时很好而糟糕。事实证明,我从以下行开始文件:

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

即。在宣布它之前,我已经使用了myclass。删除这些线路解决了问题。奇怪的是,当出现问题时,动态代码会产生什么样的例外...

相关内容

  • 没有找到相关文章

最新更新