我有一个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);
我想知道您是否在某个地方遇到了命名空间冲突
文档是否有可能在其他地方被定义在您所包含的内容中?
我们看不到您的基类是什么样子的
此外,我们看不到您使用的需要/包含什么
我举了一个例子,它似乎如预期的那样工作:
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
您可以尝试使用这个更简单的示例代码,看看是否可以按照您期望的方式创建对象吗?