Проблема создания объекта с перегруженным конструктором в IronRuby? - PullRequest
0 голосов
/ 10 июня 2011

У меня есть ac # класс "Document" с перегруженными конструкторами (int id), (guid id) и некоторыми другими параметрами - и без перегрузки с 0 параметрами.Когда я пытаюсь создать новый объект с помощью IronRuby, я спотыкаюсь.Он говорит, что хочет иметь 0 аргументов, поэтому:

d = Document.new

работает нормально.Но когда я пытаюсь

d = Document.new some_integer

, я получаю сообщение об ошибке

"wrong number of arguments (1 for 0)"

Определение класса выглядит так:

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);

1 Ответ

1 голос
/ 11 июня 2011

Интересно, вы где-нибудь столкнулись с пространством имен?
Есть ли вероятность, что 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' => правда

d = Document.new (ir): 1: в `const_missing ': неинициализированная константа Object :: Document (NameError) from (ir): 1 <- потому что я не включил пространство имен </strong>

d = IRConstructorParamSpike :: Document.new (ir): 1: неверное количество аргументов (0 для 1) (ArgumentError) <- что мы ожидаем без конструктора без параметров </strong>

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

Не могли бы вы попробовать этот более простой пример кода и посмотреть, сможете ли вы создать объекты так, как вы ожидаете?

...