在IronRuby中使用重载构造函数实例化对象的问题?

时间:2011-06-10 18:32:32

标签: c# ironruby

我有一个带有重载构造函数(int id),(guid id)和更多参数选项的c#类“Document” - 并且没有带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上下文中,我使用较小的case来翻译名称空间,以便能够在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);

1 个答案:

答案 0 :(得分:1)

我想知道你是否在某个地方遇到命名空间碰撞 是否有可能将Document定义在您所包含的其他地方?

我们无法看到您的基类是什么样的 此外,我们无法看到您使用的

需要/包含的内容

我设置了一个示例,它似乎按预期工作:

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'       =&GT;真

             

d = Document.new       (ir):1:在`const_missing'中:未初始化的常量Object :: Document(NameError)               from(ir):1 &lt; - 因为我没有包含命名空间

             

d = IRConstructorParamSpike :: Document.new       (ir):1:错误的参数数量(0表示1)(ArgumentError)&lt; - 没有无参数构造函数的期望

             

d = IRConstructorParamSpike :: Document.new 10       =&GT; IRConstructorParamSpike.Document

    
  

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