我尝试按照MSDN给出的示例,但我的代码不能在紧凑的框架上编译。但它确实在普通框架上编译。
type StorageComponent(game) =
inherit GameComponent(game)
let title_storage_acquired_event = new Control.DelegateEvent<StorageEventHandler>()
错误讯息:
未定义“DelegateEvent”类型
答案 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
)。它也可能提供关于做什么的线索;我不确定,但希望其他人能够完整答案。