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」未找到(使用第二定義時,第一個編譯就好了)
我怎麼定義一個類let
結合(或成員結合,如果這是一個更好的方式來得到這份工作完成)使用Statically Resolved Type Parameters能夠在任何具有匹配方法簽名的方法上調用該方法?
這樣的話,你不能使用咖喱職能與SRTP? – Maslow
@Maslow:你可以,但你需要以不尋常的方式寫出來。我添加了一個替代答案。 – piaste