在IronRuby中用重载构造函数实例化对象时出现问题

本文关键字:对象 问题 实例化 构造函数 IronRuby 重载 | 更新日期: 2023-09-27 17:58:57

我有一个c#类"Document",它有重载的构造函数(int id)、(guid id)和一些其他参数选项,并且没有0个参数的重载。当我试图用IronRuby创建一个新对象时,我遇到了麻烦。它说它想要0个参数,所以:

d = Document.new

工作良好。但当我尝试时

d = Document.new some_integer

我收到错误信息

"wrong number of arguments (1 for 0)"

类def看起来像这样:

public Document(int id) : base(id)
{
  // some code
}

编辑:这是完整的代码。它在Umbraco上下文中,我用较低的大小写转换名称空间,以便能够在IronRuby:中使用它们

$LOAD_PATH << "C:''inetpub-dev''dev.mysite.com''bin"
require "cms.dll"
require "businesslogic.dll"
Web = Object.const_get("umbraco").const_get("cms").const_get("businesslogic").const_get("web")
existing_document_id = 1065
existing_document = Web::Document.new(existing_document_id)

C#中的相同代码:

var existingDocument = new umbraco.cms.businesslogic.web.Document(1065);

在IronRuby中用重载构造函数实例化对象时出现问题

我想知道您是否在某个地方遇到了命名空间冲突
文档是否有可能在其他地方被定义在您所包含的内容中?

我们看不到您的基类是什么样子的
此外,我们看不到您使用的需要/包含什么

我举了一个例子,它似乎如预期的那样工作:

namespace IRConstructorParamSpike
{
    public abstract class BaseDocument
    {
        public BaseDocument(int id) { }
    }
    public class Document : BaseDocument
    {
        public Document(int id) : base(id) { }
    }
    public class SomeDocument : BaseDocument
    {
        public SomeDocument(int id) : base(id) { }
    }
}

以下是会话的样子(使用IronRuby 1.1.4.0):

需要"IRConstructorParamSpike.dll"=>真实

d=文档新(ir):1:在"const_missing"中:未初始化的常量对象::Document(NameError)from(ir):1<--因为我没有包含名称空间

d=IRConstructorParamSpike::Document.new(ir):1:参数数量错误(0代表1)(ArgumentError)<--如果没有无参数构造函数,我们会期望什么

d=IRConstructorParamSpike::Document.new 10=>IRConstructorParamSpike.Document

您可以尝试使用这个更简单的示例代码,看看是否可以按照您期望的方式创建对象吗?