【发布时间】:2016-06-07 01:46:53
【问题描述】:
我正在尝试在 F# 中创建一小段代码。我的想法是我将有一个定义一些方法、属性和事件的接口。使用这个接口,我想定义一个抽象类(具有泛型类型),它将实现一些属性/方法,但不是接口中定义的所有成员。定义所有成员的责任将由派生类承担。
到目前为止,我还停留在接口和抽象类上。我遇到的问题:
- 抽象类定义无法识别接口定义
- 我不确定如何在抽象类中为接口定义抽象成员
接口编译正常,但抽象类有几个错误。消息包含在代码中
感谢所有 cmets、更正、提示等。由于这是我在 F# 上的第一次试验,可能有很多错误需要指出。
目前为止的代码
接口定义
namespace A
type IValueItem =
interface
[<CLIEvent>]
abstract member PropertyChanged :
Control.IEvent<System.ComponentModel.PropertyChangedEventHandler,
System.ComponentModel.PropertyChangedEventArgs>
abstract ConvertedX : double with get, set
abstract Y : double with get, set
abstract member CreateCopy : obj
abstract member NewTrendItem : obj
end
还有抽象类
namespace A
[<AbstractClass>]
type ValueItem<'TX>() =
[<DefaultValue>]
val mutable _y : double
let _propertyChanged = new Event<_>()
// ERROR: This type is not an interface type
// ERROR: The type 'obj' is not an interface type
// ERROR: The type 'IValueItem' is not defined
interface IValueItem with
// ERRROR No abstract or interface member was found that corresponds to this override
[<CLIEvent>]
member this.PropertyChanged :
Control.IEvent<System.ComponentModel.PropertyChangedEventHandler,
System.ComponentModel.PropertyChangedEventArgs>
= _propertyChanged.Publish
// This definition is incomplete, should be abstract
member ConvertedX : double with get, set
// ERROR: Incomplete structured construct at or before this point in pattern
member CreateCopy() : obj
member NewTrendItem() : obj
abstract X : 'TX with get, set
member this.Y
with get() = this._y
and set(value) =
if this._y <> value then
this._y <- value
this.NotifyPropertyChanged("Y")
member this.NotifyPropertyChanged(propertyName) =
this.PropertyChanged.Trigger(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName))
【问题讨论】:
标签: f#