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?