F# 活动和代表仪式
我可以接受这个说法吗F# 活动和代表仪式,f#,F#,我可以接受这个说法吗 let propertyChanged = Event<PropertyChangedEventHandler,PropertyChangedEventArgs>() 让propertyChanged= 事件() 并将其重命名为: let propertyChangedDelegate = Event<PropertyChangedEventHandler,PropertyChangedEventArgs>() 让prope
let propertyChanged =
Event<PropertyChangedEventHandler,PropertyChangedEventArgs>()
让propertyChanged=
事件()
并将其重命名为:
let propertyChangedDelegate =
Event<PropertyChangedEventHandler,PropertyChangedEventArgs>()
让propertyChangedDelegate=
事件()
我想了解F#内的活动宣布仪式
具体而言,我试图理解以下两者之间的区别:
let propertyChanged =
Event<PropertyChangedEventHandler,PropertyChangedEventArgs>()
让propertyChanged=
事件()
以及:
接口INotifyProperty已更改为
[]
成员this.PropertyChanged=PropertyChanged.Publish
下面是代码的全部范围:
open System.ComponentModel
open Microsoft.FSharp.Quotations.Patterns
type ViewModelBase () =
let propertyChanged =
Event<PropertyChangedEventHandler,PropertyChangedEventArgs>()
let getPropertyName = function
| PropertyGet(_,pi,_) -> pi.Name
| _ -> invalidOp "Expecting property getter expression"
interface INotifyPropertyChanged with
[<CLIEvent>]
member this.PropertyChanged = propertyChanged.Publish
member private this.NotifyPropertyChanged propertyName =
propertyChanged.Trigger(this,PropertyChangedEventArgs(propertyName))
member this.NotifyPropertyChanged quotation =
quotation |> getPropertyName |> this.NotifyPropertyChanged
opensystem.ComponentModel
打开Microsoft.FSharp.quotes.Patterns
类型ViewModelBase()=
让propertyChanged=
事件()
让getPropertyName=函数
|PropertyGet(3;,pi,3;)->pi.Name
|->invalidOp“应为属性getter表达式”
接口INotifyProperty更改为
[]
成员this.PropertyChanged=PropertyChanged.Publish
成员private this.NotifyPropertyChanged propertyName=
触发器(此,PropertyChangedEventArgs(propertyName))
成员this.NotifyPropertyChanged报价单=
QUOTE |>getPropertyName |>this.NotifyPropertyChanged
有人能给我解释一下事件是如何在F#中实现的吗?在F#中,事件只是可以传递的IEvent
类型的值。因此,要创建事件,您需要编写此接口的一些实现(处理添加和删除事件处理程序)
事件
类型提供了接口的默认合理实现。当你写作时:
let propertyChanged =
Event<PropertyChangedEventHandler,PropertyChangedEventArgs>()
只是公开事件的一种方式(使用CLIEvent
属性告诉F#编译器它应该编译为与.NET兼容的事件)
如果您想了解更多信息,还有其他方法。在F#中,事件只是可以传递的IEvent
类型的值。因此,要创建事件,您需要编写此接口的一些实现(处理添加和删除事件处理程序)
事件
类型提供了接口的默认合理实现。当你写作时:
let propertyChanged =
Event<PropertyChangedEventHandler,PropertyChangedEventArgs>()
只是公开事件的一种方式(使用CLIEvent
属性告诉F#编译器它应该编译为与.NET兼容的事件)
如果你想了解更多,还有很多
interface INotifyPropertyChanged with
[<CLIEvent>]
member this.PropertyChanged = propertyChanged.Publish