如何在紧凑的框架上实现F#中的自定义事件?

时间:2010-09-05 14:53:54

标签: f# compact-framework

我尝试按照MSDN给出的示例,但我的代码不能在紧凑的框架上编译。但它确实在普通框架上编译。

type StorageComponent(game) =
    inherit GameComponent(game)

let title_storage_acquired_event = new Control.DelegateEvent<StorageEventHandler>()

错误讯息:

未定义“DelegateEvent”类型

2 个答案:

答案 0 :(得分:3)

根据Brian的提示,它看起来.NET Compact Framework不支持类型DelegateEvent<'Delegate>Event<'Delegate, 'Args>。这意味着您无法声明使用显式指定的委托类型的事件。

但是,您仍然可以使用Event<'T>类型创建类型为Handler<'T>的事件(这是一种通用委托类型,表示具有类型obj和{{1}的两个参数的方法}}):

'T

假设type StorageComponent(game) = inherit GameComponent(game) let titleStorageAcquiredEvent = new Event<StorageEventArgs>() [<CLIEvent>] // If you want to create C# compatible event member x.TitleStorageAcquired = titleStorageAcquiredEvent.Publish() 的声明如下:

StorageEventHandler

上面的示例应该创建或多或少的等效代码(唯一的区别是它使用通用delegate void StorageEventHandler(object sender, StorageEventArgs args); 委托类型而不是您自己的Handler<_>)。

答案 1 :(得分:0)

如果您查看CTP中的代码

C:\Program Files (x86)\FSharp-2.0.0.0\source\fsharp\FSharp.Core\event.fs

它会提供一些线索(我猜测NETCF没有del.DynamicInvoke)。它也可能提供关于做什么的线索;我不确定,但希望其他人能够完整答案。