2009-05-24 5 views
9

J'essaye de publier un événement d'un type F #, mais je veux qu'il soit vu comme un événement de C# ou de VB. Il semble que la façon correcte de le faire était IEvent.create_HandlerEvent, mais cette fonction n'existe pas dans la nouvelle version de F #. Alors, quelle est la bonne façon de le faire maintenant?Comment créer des événements compatibles .NET en F #?

Répondre

13

événements ne sont pas mon fort, mais cet exemple semble fonctionner sur F # 1.9.6.16:

namespace EventExample 
open System 
type MyEventArgs(msg:string) = 
    inherit EventArgs() 
    member this.Message = msg 

type MyEventDelegate = delegate of obj * MyEventArgs -> unit 

type Foo() = 
    let ev = new Event<MyEventDelegate, MyEventArgs>() 

    member this.Ping(msg) = 
     ev.Trigger(this, new MyEventArgs(msg)) 

    [<CLIEvent>] 
    member this.GotPinged = ev.Publish 

Voir aussi

http://cs.hubfs.net/forums/thread/10555.aspx

+0

Merci, ça marche :) Puis-je demander comment a fait vous connaissez le CLIEventAttribute? Je ne le vois pas mentionné nulle part dans la documentation/spécification de la langue/google ... –

+4

Je sais parce que je suis un développeur sur l'équipe F #, donc j'ai des «informations privilégiées». :) Ouais, cela semble manquer dans les notes de version et les spécifications; nous ferons une mise à jour des spécifications bientôt. (N'hésitez pas à me donner un upvote en plus de la coche. :)) – Brian

+1

Aime quand les initiés apparaissent avec les marchandises ;-p –

Questions connexes