¿Cómo puedo agregar atributos a un método público en un F # tipo?
-
16-10-2019 - |
Pregunta
Sólo estoy tratando de salir F #, por primera vez, y jugando con su interoperabilidad con los proyectos de C #.
He encargo atributos definidos en un proyecto de C #, y se añade una referencia a ese proyecto en mi nuevo proyecto F #. Cuando intento para definir los atributos de una declaración "dejar", el "let" está permanentemente privado y por lo que no importa que la obra atributos. Cuando intento cambiar el "let" comunicado a otra cosa, por ejemplo, "miembro", me han dicho los atributos no se identifique el objeto. ¿Cómo debería ser la definición de la función si quiero que sea pública y tienen atributos?
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
Como he indicado en el código, me parece que tienen un problema. Mis atributos se establecen únicamente a los métodos de destino, y que pueden ponerlos en los estados "let", pero no declaraciones "miembro". Estoy seguro de que esto es algo tonto, pero gracias de antemano por su ayuda!
Solución
El problema es que su definición member
es una propiedad, no es un método. Al igual que en la respuesta de Wesley, añadir algunos argumentos (sólo parens vacías está bien) para que sea un método.
(posiblemente véase también
http://blogs.msdn.com/b/timng/archive/2010/04/05/f-object-oriented-programming-quick-guide.aspx
y
http : //lorgonblog.wordpress.com/2009/02/13/the-basic-syntax-of-f-classes-interfaces-and-members/
)
Otros consejos
Prueba esto:
type myAttribute() =
inherit System.Attribute()
;
type test() =
[<myAttribute()>]
member this.func() = "test from f#"