2011-01-22 9 views
3

私はF#を初めて試していて、C#プロジェクトとの相互運用性を試しています。F#型のパブリックメソッドに属性を追加するにはどうすればよいですか?

私はカスタム属性をC#プロジェクトで定義し、そのプロジェクトへの参照を新しいF#プロジェクトに追加しました。属性を "let"ステートメントに定義しようとすると、 "let"は永久にプライベートなので、属性が機能するかどうかは関係ありません。 "let"ステートメントを何か他のもの、例えば "member"に変更しようとすると、属性がオブジェクトをターゲットできないと言われます。関数を公開し、属性を持たせたい場合は、関数をどのように定義する必要がありますか?

module FSharp 

type public MyClass() = 
    class 
     //this one will get the attributes, but is always private and can't be made public 
     [<Core.NameAttribute("F# name")>] 
     [<Core.DescriptionAttribute("F# desc")>] 
     let f1 = "test from F#" 

     //this one won't get the attributes, but is public and does return the value 
     member this.Function1 = f1 
    end 

私がコードに述べたように、私は問題があるようです。私の属性はターゲットメソッドだけに設定されており、 "let"ステートメントでは設定できますが、 "member"ステートメントでは設定できません。私はこれが愚かなものだと確信していますが、事前にあなたの助けに感謝します!

答えて

3

問題は、あなたのmember定義は財産ではない方法であることです。ウェズリーの答えのように、それを方法にするためにいくつかの議論を加えてください(空の括弧はうまいです)。

(おそらくは

http://blogs.msdn.com/b/timng/archive/2010/04/05/f-object-oriented-programming-quick-guide.aspx

http://lorgonblog.wordpress.com/2009/02/13/the-basic-syntax-of-f-classes-interfaces-and-members/

参照)

3

これを試してみてください:

type myAttribute() = 
    inherit System.Attribute() 
    ; 

type test() = 
    [<myAttribute()>] 
    member this.func() = "test from f#" 
関連する問題