代码之家  ›  专栏  ›  技术社区  ›  Joh

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

  •  1
  • Joh  · 技术社区  · 14 年前

    我试着仿效上的例子 MSDN ,但我的代码不在紧凑的框架上编译。不过,它确实是在普通框架上编译的。

    type StorageComponent(game) =
        inherit GameComponent(game)
    
    let title_storage_acquired_event = new Control.DelegateEvent<StorageEventHandler>()
    

    错误消息:

    未定义类型“DelegateEvent”

    2 回复  |  直到 14 年前
        1
  •  3
  •   Tomas Petricek    14 年前

    根据布莱恩的暗示,看起来 DelegateEvent<'Delegate> Event<'Delegate, 'Args> 在.NET Compact Framework上不支持。这意味着您不能声明使用显式指定的委托类型的事件。

    Event<'T> 创建类型为的事件的类型 Handler<'T> obj '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<_> 存储事件处理程序

        2
  •  0
  •   Brian    14 年前

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

    它将提供一些线索(我猜NETCF没有) del.DynamicInvoke