2010-06-29 8 views
0

Il semble impossible de créer un objet en utilisant son constructeur par défaut quand il y a une méthode .Nouvelle() statique définie sur la classe:Création d'un objet .NET dans IronRuby lorsqu'une méthode .Nouvelle() statique est définie

classe .NET:

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

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

Code IronRuby:

Tester.new 
Tester.New 

deux de ces lignes appelez Tester.New(), pas le constuctor. Il semble impossible d'appeler le constructeur de la classe Tester.

Existe-t-il une solution de contournement ou s'agit-il d'un bogue?

Répondre

1

Le premier est juste une ambiguïté inévitable. Si vous voulez que les classes CLI ressemblent aux classes Ruby, vous n'avez pas d'autre choix que de mapper le constructeur à une méthode new. Donc, si vous avez à la fois une méthode réellenew et une méthode synthétisée qui mappe à un constructeur, quoi que vous fassiez, soit la méthode synthétique soit l'ombre du vrai ou de l'inverse. De toute façon, vous perdez.

Voilà pourquoi toutes les classes de CLI ont une méthode clr_new synthétique:

Tester.clr_new 
# In constructor 
+0

Il ne fait pas vraiment une traduction dans le second cas. Il appelle la méthode New() statique, comme prévu –

+0

@Philippe Leybaert: Oui, bien sûr. Je ne sais pas pourquoi je me suis trompé là-bas. S'il faisait une traduction, il appellerait évidemment le constructeur. –