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