为 C# 接口制作 F# class 或模块?

Make an F# class or module for a C# interface?

我完全迷失在 F# 界面上。我正在尝试用满足 C# 接口的 F# 类型替换我的 C# classes。

我有以下 C# 接口:

public interface IPatientName
    {
        string lastName { get; }
        string firstName { get; }
        string mi { get; }
        DateTime? birthDate { get; }       
    }

在我的 C# 代码中,我有多个依赖注入和其他类似的东西,例如 "List<"IPatientName>”。

假设我有一个典型的 C# class 实现了 IPatientName, 例如,

public class PatientName : IPatientName
{
     …………….
}

如何使 F# 模块或 class 满足 C# 编译器的要求并用 F# class 或模块替换 C# class PatientName?

感谢您对此的任何帮助。

实现接口非常简单。鉴于上面的示例,下面的代码就足够了。注意:在 F# 上下文中,实际上并不推荐 Nullable,但对于 C# interop,可以使用它。对于 F# 不可知论代码,最好使用可以更好地处理 null 问题的 Option 类型。 Ionide(VS 代码)扩展在撰写本文时可以 implement/generate 在您在下面的 class 中键入代码的 "interface IPatientName" 部分后为您提供方法。

open System

// F# version of the interface you described.
type IPatientName = 
    abstract member LastName: string with get
    abstract member FirstName: string with get
    abstract member Mi: string with get
    abstract member BirthDate: Nullable<DateTime> with get

// Class implementing interface above.
type PatientName = 
    interface IPatientName with
        member this.BirthDate = Nullable(DateTime(2020, 1, 1))
        member this.FirstName = "FirstName"
        member this.LastName = "LastName"
        member this.Mi = "Mi"