有没有办法让记录在F#中继承一个抽象类?

Tom*_*son 3 f#

假设我有一个界面IEvent.这个接口有一个Id我用C#实现的属性:

public abstract class EventBase : IEvent
{
    public Guid Id { get; protected set; }
]
Run Code Online (Sandbox Code Playgroud)

有没有办法在F#记录中继承这个抽象类?

就像是:

type OneOfMyEvents = {Id: Guid, Prop: string}
    inherit EventBase(Id)
Run Code Online (Sandbox Code Playgroud)

问题是我想将我的所有事件定义为记录,因为它非常方便但我也想强制我的所有事件都有一个我不必每次都输入的Id属性.

Jac*_* P. 7

记录不能从类继承,但它们可以实现接口.例如,使用您的IEvent界面:

open System

[<Interface>]
type IEvent =
    abstract Id : Guid with get


type MyRecord = {
    Id: Guid;
    Prop: string;
} with
    interface IEvent with
        member this.Id
            with get () = this.Id
Run Code Online (Sandbox Code Playgroud)


Sør*_*ois 5

没有.

没有语法指定记录从任何继承.

f#中的记录类型与类类型不同.从类到记录的继承是没有意义的:记录具有结构相等语义,而类(通常)具有引用相等语义.因此,继承可能意味着从前者转移到后者,因为一个人继承了继承层次结构,违反了我们对子类和超类(记录?)之间关系的期望.