Как добавить атрибуты к общедоступному методу в типе F #? - PullRequest
3 голосов
/ 22 января 2011

Я просто впервые пробую F # и играю с его взаимодействием с C # проектами.

У меня есть пользовательские атрибуты, определенные в проекте 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.Я уверен, что это что-то глупое, но заранее благодарю за помощь!

Ответы [ 2 ]

3 голосов
/ 22 января 2011

Проблема в том, что ваше 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 голосов
/ 22 января 2011

Попробуйте это:

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

type test() = 
    [<myAttribute()>]
    member this.func() = "test from f#"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...