C# 为什么attr_访问器创建一个属性,而method只是一个方法?

C# 为什么attr_访问器创建一个属性,而method只是一个方法?,c#,interop,ironruby,C#,Interop,Ironruby,我正在玩C#和IronRuby之间的互操作。我注意到,如果我使用attr\u accessor在Ruby中定义一个属性,它将作为一个属性呈现给C。另一方面,如果我手动创建完全相同的代码,它将作为方法返回 例如,以以下代码为例: var engine = IronRuby.Ruby.CreateEngine(); string script = @" class Test attr_accessor :automatic def manual @manual

我正在玩C#和IronRuby之间的互操作。我注意到,如果我使用
attr\u 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源代码(moduleps.cs:DefineAccessor)的模块代码中有一些神奇之处。有没有办法直接在Ruby代码中实现这一点?

IronRuby核心线程中进一步讨论了这一特定问题:

在IronRuby核心线程中进一步讨论了这个特定问题: