2010-07-19 3 views
2

Je joue avec l'interop entre C# et IronRuby. J'ai remarqué que si je définis une propriété dans Ruby en utilisant attr_accessor, elle est présentée à C# comme une propriété. Si, d'un autre côté, je crée manuellement le même code, il revient comme une méthode.Pourquoi attr_accessor crée-t-il une propriété, mais la méthode n'est qu'une méthode?

Par exemple, prenez ce code:

var engine = IronRuby.Ruby.CreateEngine(); 
string script = @" 
    class Test 
    attr_accessor :automatic 

    def manual 
     @manual 
    end 

    def manual=(val) 
     @manual = val 
    end 

    def initialize 
     @automatic = ""testing"" 
     @manual = ""testing"" 
    end 
    end 

    Test.new 
"; 
var testObject = engine.Execute(script); 

var automatic = testObject.automatic; 
var manual = testObject.manual; 

Quand vous regardez la variable C# automatic, la valeur est une chaîne de "testing". Si vous regardez la variable C# manual, il s'agit du type IronRuby.Builtins.RubyMethod.

Finalement, je veux créer mes propres propriétés dans Ruby qui peuvent être utilisées en C#, mais je ne peux pas les rendre visibles comme le font les propriétés attr_accessor.

JE PENSE qu'il y a de la magie qui se passe dans le code du module du code source Ruby (ModuleOps.cs: DefineAccessor). Est-il possible de faire cela directement dans le code Ruby?

Répondre

Questions connexes