gpt4 book ai didi

events - 应该如何在 F# 接口(interface)中声明事件?

转载 作者:行者123 更新时间:2023-12-03 13:24:36 26 4
gpt4 key购买 nike

在 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

但这不会编译 - 接口(interface)内的成员会导致错误:“未找到与此覆盖相对应的抽象或接口(interface)成员”。我应该如何在我的界面中声明事件?还是我的成员语法错误?

注意 - 这是 不是 关于在 F# 中使用 C# 事件或在 F# 中使用一般事件 - 接口(interface)方面是关键。

最佳答案

您需要在接口(interface)和实现上指定 CLIEvent 属性。

open System;

type MyDelegate = delegate of obj * EventArgs -> unit

type IMyType =
[<CLIEvent>]
abstract member OnMyEvent : IEvent<MyDelegate, EventArgs>

type MyType () =
let myEvent = new Event<MyDelegate, EventArgs> ()

interface IMyType with
[<CLIEvent>]
member this.OnMyEvent = myEvent.Publish

关于events - 应该如何在 F# 接口(interface)中声明事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13380519/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com