2009-09-11 7 views
2

Cela semble fonctionner très bien en C#:Comment définir des attributs distincts sur les getters et les setters en F #?

class A : System.Attribute { public A() {} } 

public class B 
{ 
    public int X 
    { 
     [A] get { return 1; } 
     [A] set { } 
    } 
} 

Mais en F #, que je tente de définir les attributs sur apporteurs de propriété et setters, je ne peux pas autour d'une erreur de syntaxe:

type A() = inherit System.Attribute() 

type B = 
    member this.X 
     with [<A>] get() = 1 
     and [<A>] set (x : int) =() 

est-il un moyen de le faire?

Mon but est de définir des attributs distincts sur les getters et les setters.

+0

Cela semble maintenant fonctionner comme prévu, même si je ne suis pas sûr quand il a été corrigé. – kvb

Répondre

2

Le MSDN-documentation suggère ce qui suit:

type A() = inherit System.Attribute() 

type B =  
    [<A>] 
    member this.X with get() = 1 
    [<A>] 
    member this.X with set (x : int) =() 

... mais selon .Net Reflector il ne semble pas produire l'IL attendu. On dirait un bug pour moi.

Edit: Ou un bogue dans .Net Reflector ...

Edit 2: Rapport de bogue soumis à [email protected]

+0

Merci! En effet, je ne peux pas sembler pouvoir récupérer l'attribut setter par réflexion. Je contacte fsbugs @ ... – t0yv0

+0

Je l'ai fait il y a quelques secondes ... –

+0

Cela ne semble toujours pas fonctionner (malgré la documentation), alors que la tentative initiale de @ t0yv0 fonctionne maintenant. – kvb

1

Pour mémoire, la réponse de l'équipe F # a été:

Right now (and also in the upcoming Beta2), attributes targeting property getters and setters specifically are not supported.

Questions connexes