F# でイベントを発行する標準的な方法は、次のようになります。
type MyDelegate = delegate of obj * EventArgs -> unit
type MyType () =
let myEvent = new Event<MyDelegate, EventArgs> ()
[<CLIEvent>]
member this.OnMyEvent = myEvent.Publish
他の.NET言語(少なくとも私がテストしたC#)からそのイベントを消費できることを含め、それはうまく機能します。しかし、そのイベントをインターフェイスに表示するにはどうすればよいでしょうか? これが私が試していることです...
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# での C# イベントの使用や F# での一般的なイベントの使用に関するものではありません。インターフェイスの側面が重要です。