2010-07-19 3 views
2

C#과 IronRuby 사이의 interop을 가지고 놀고 있습니다. Ruby에서 attr_accessor을 사용하여 속성을 정의하면 C#에 속성으로 표시된다는 것을 알았습니다. 반면에, 내가 정확히 동일한 코드를 수동으로 생성한다면, 그것은 다시 방법으로 돌아옵니다.attr_accessor가 속성을 만드는 이유는 무엇입니까?

예를 들어,이 코드를 가지고 :

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 변수를 볼 때, 값은 "시험"의 문자열입니다. C# manual 변수를 보면 IronRuby.Builtins.RubyMethod 유형입니다.

궁극적으로 C#에서 사용할 수있는 Ruby에서 내 자신의 속성을 만들고 싶지만 attr_accessor과 같은 속성으로 표시 할 수없는 것처럼 보입니다.

내가 생각하기에는 루비 소스 코드 (ModuleOps.cs : DefineAccessor)의 모듈 코드에 몇 가지 마술이있다. Ruby 코드에서 직접이 작업을 수행 할 수있는 방법이 있습니까?

답변

관련 문제