我有一个带有重载构造函数(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);
答案 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
您是否可以尝试使用这个更简单的示例代码,看看是否可以按照预期的方式创建对象?