为什么attr_accessor会创建一个属性,但方法只是一种方法?

时间:2010-07-19 01:06:02

标签: c# interop ironruby

我正在玩C#和IronRuby之间的互操作。我注意到如果我使用attr_accessor在Ruby中定义属性,它将作为属性呈现给C#。另一方面,如果我手动创建完全相同的代码,它将作为一种方法返回。

例如,请使用以下代码:

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;

当您查看C#automatic变量时,该值是一个“testing”字符串。如果你看一下C#manual变量,它的类型是IronRuby.Builtins.RubyMethod。

最终,我想在Ruby中创建自己的属性,可以在C#中使用,但我似乎无法使它们像attr_accessor这样的属性可见。

我认为,Ruby源代码(ModuleOps.cs:DefineAccessor)的模块代码中有一些神奇的东西。有没有办法直接在Ruby代码中执行此操作?

1 个答案:

答案 0 :(得分:0)