2011-06-10 2 views
0

У меня есть класс «Документ» C# с перегруженными конструкторами (int id), (guid id) и еще несколько параметров параметров и без перегрузки с 0 параметрами. Когда я пытаюсь создать новый объект с IronRuby, я спотыкаюсь. В нем говорится, что он хочет иметь 0 аргументов, поэтому:Проблема создания объекта с перегруженным конструктором в IronRuby?

d = Document.new 

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

d = Document.new some_integer 

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

"wrong number of arguments (1 for 0)" 

Класса Защита выглядит следующим образом:

public Document(int id) : base(id) 
{ 
    // some code 
} 

Edit: вот полный код. Это в контексте Umbraco, и я перевожу пространства имен с более низкой caseing, чтобы иметь возможность использовать их в 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

Интересно, если вы ударяете столкновение пространства имен где-то.
Есть ли какая-то возможность, что документ определен где-то еще в том, что вы включаете?

Мы не можем увидеть, что ваш базовый класс выглядит
Кроме того, мы не можем видеть то, что требуется/включает в себя вы используете

Я создал пример, и это, кажется, работает, как ожидалось:

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 (л): 1: в `const_missing ': неинициализированный константа объекта :: Документ (NameError) из (л): 1 < - Потому что я не включил в пространство имен

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

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

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

+0

Спасибо большое - хорошо, поэтому мой Ruby не был совсем не прав, что чувствует себя хорошо.Хорошо возможная проблема пространства имен, интересно, где же, я попытаюсь выглядеть немного больше. Теперь я добавил полный фрагмент кода, надеюсь, что это немного разъяснит. – joeriks

+0

Ах! Я скачал umbraco, чтобы тоже посмотреть. Оказывается, существует метод, определенный в документе, который на самом деле называется «Новый». В этом случае .. Если вы действительно хотите просто использовать contructor (выглядит так!), Тогда вам нужно использовать «.clr_new» для дифференциации. Проверьте это: http://rubyforge.org/pipermail/ironruby-core/2010-June/007081.html –

+0

ничего себе, просто ничего себе, очень полезно и прекрасно работает, спасибо миллион! :) – joeriks

Смежные вопросы