假设我有一个界面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属性.
记录不能从类继承,但它们可以实现接口.例如,使用您的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)