Создание объекта .NET в IronRuby, когда определен статический метод .New () - PullRequest
0 голосов
/ 29 июня 2010

Кажется невозможным создать объект с помощью конструктора по умолчанию, когда в классе определен статический метод .New ():

.NET class:

public class Tester
{
    public static void New()
    {
        Console.WriteLine("In Tester.New()");
    }

    public Tester()
    {
        Console.WriteLine("In constructor");
    }
}

Код IronRuby:

Tester.new
Tester.New

Обе эти строки вызывают Tester.New () , а не конструктор.Кажется невозможным вызвать конструктор класса Tester .

Есть ли обходной путь или это ошибка?

1 Ответ

1 голос
/ 30 июня 2010

Первый - это просто неизбежная двусмысленность. Если вы хотите, чтобы классы CLI выглядели как классы Ruby, у вас нет другого выбора, кроме как сопоставить конструктор с методом new. Итак, если у вас есть и метод real new, и синтезированный метод, который отображается на конструктор, что бы вы ни делали, синтетический метод затеняет реальный или наоборот. В любом случае, вы проигрываете.

Вот почему все классы CLI имеют синтетический clr_new метод:

Tester.clr_new
# In constructor
...