Проблема создать объект с перегруженным конструктором в Ironruby?
Вопрос
У меня есть AC# Class «Document» с перегруженными конструкторами (INT ID), (идентификатор GUID) и некоторые дополнительные параметры параметров - и без перегрузки с 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):
Требуется 'irconstruproparamspike.dll' => true
d = document.new (ir): 1: в `const_missing ': ненициализированный постоянный объект :: document (nameerror) из (ir): 1 <- Потому что я не включил пространство имен
d = irconstrupropramspike :: document.new (ir): 1: неправильное количество аргументов (0 для 1) (ArgementError) <- Что мы ожидаем без параметра.
d = irconstrupropramspike :: document.new 10 => irconstruprupraparamspike.document
Не могли бы вы попробовать с этим более простым примером кода и посмотреть, сможете ли вы создать объекты так, как ожидаете?