Стандартный способ публикации событий в F # теперь выглядит следующим образом:
type MyDelegate = delegate of obj * EventArgs -> unit
type MyType () =
let myEvent = new Event<MyDelegate, EventArgs> ()
[<CLIEvent>]
member this.OnMyEvent = myEvent.Publish
и это прекрасно работает, включая возможность использовать это событие на других языках .NET(С# по крайней мере, что я тестировал). Но как вы можете сделать это событие в интерфейсе? Вот что я пытаюсь...
type MyDelegate = delegate of obj * EventArgs -> unit
type IMyType =
abstract member OnMyEvent : IEvent<MyDelegate, EventArgs>
type MyType () =
let myEvent = new Event<MyDelegate, EventArgs> ()
interface IMyType with
[<CLIEvent>]
member this.OnMyEvent = myEvent.Publish
Но это не скомпилируется - член в интерфейсе вызывает ошибку: "Абсолютного или интерфейса не найдено, что соответствует этому переопределению". Как мне объявить событие в моем интерфейсе? Или это не так, что синтаксис моего члена неверен?
Примечание. Это не о потреблении событий С# в F # или об использовании общего события в F # - аспект интерфейса является ключевым.