2009-05-24 11 views
9

Estoy intentando publicar un evento de un tipo F #, pero quiero que se vea como un evento desde C# o VB. Parece que la forma correcta de hacerlo solía ser IEvent.create_HandlerEvent, pero esta función no existe en la versión más reciente de F #. Entonces, ¿cuál es la forma correcta de hacerlo ahora?¿Cómo crear eventos compatibles con .NET en F #?

Respuesta

13

Los eventos no son mi fuerte, pero este ejemplo parece funcionar en 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 

Véase también

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

+0

Gracias, funciona :) ¿Puedo preguntar cómo lo hizo usted sabe sobre CLIEventAttribute? No lo veo mencionado en ningún lugar de la especificación de documentación/idioma/google ... –

+4

Lo sé porque soy un desarrollador en el equipo F #, así que tengo 'información interna'. :) Sí, parece que falta en las notas de la versión y la especificación; estaremos haciendo una actualización de especificaciones pronto. (Siéntase libre de darme un voto positivo además de la marca de verificación :) :) – Brian

+1

Me encanta cuando los informantes internos aparecen con los productos ;-p –

Cuestiones relacionadas