【发布时间】:2016-06-08 00:28:50
【问题描述】:
给定
open System
open System.Windows
open System.Windows.Input
open System.ComponentModel
type RelayCommand (canExecute:(obj -> bool), action:(obj -> unit)) =
let event = new DelegateEvent<EventHandler>()
interface ICommand with
[<CLIEvent>]
member x.CanExecuteChanged = event.Publish
member x.CanExecute arg = canExecute(arg)
member x.Execute arg = action(arg)
member x.CheckCanExecute (sender:obj) (eventArgs:EventArgs) = event.Trigger([| sender;eventArgs |])
如何编写一个静态解析的类型参数化函数来满足对CheckCanExecute 的调用?
虽然这个函数有效,但它并不能帮助我学习静态解析的类型参数语法
let checkCanExecute (c:RelayCommand) = c.CheckCanExecute (box this) (EventArgs())
我希望这可以工作
let checkCanExecute (e:^a) = (^a: (member CheckCanExecute: sender:obj -> EventArgs -> unit ) (e, (box me),(EventArgs())))
但在呼叫站点
checkCanExecute addCommand
我得到 找不到方法或对象构造函数“CheckCanExecute”(使用第二个定义时,第一个编译就好了)
如何定义使用Statically Resolved Type Parameters 的类let 绑定(或成员绑定,如果这是完成工作的更好方法),以便能够在具有匹配方法签名的任何对象上调用该方法?
【问题讨论】:
标签: f#