6

我决定用 F# 连同 MVC4 和 Nhibernate 一起承担一个相对较大的项目。

现在,在 C# 中,我通常使用 ORM 的做法是为某些属性(例如自动递增/身份属性、时间戳等)设置私有设置器。IE

public class Guide
{
    public int Id { get; private set; }
    public DateTime Created { get; private set; }

    public Guide()
    {
        Created = DateTime.Now;
    }
}

这里 id 是一个“身份列”,ORM 将处理设置它的值。

在 F# 中,这是我到目前为止所拥有的

type public Guide() =
    member val public Id = 0 with get, set
    member val public Created = DateTime.MinValue with get, set

但是我遇到的问题是getter/setter不能有访问修饰符!

我是 F# 的新手,所以我想知道执行此类操作的最佳方法。但是,我不只是想用 F# 重写 C# 代码!我想知道正确的(功能)方法。也许使用其他构造?

编辑:对于 NHibernate,在 setter 中将 private 替换为 protected :)

4

1 回答 1

5

根据MSDN 上的Properties (F#) page,您可以在 getter/setter 上使用访问修饰符。您还可以对 getter 和 setter 使用不同的访问修饰符(例如, publicget和 private set)。

不能做的是对自动实现的属性使用差异访问修饰符。因此,如果您想使用不同的访问修饰符,您需要手动实现支持字段(使用 a let)和 getter/setter 方法。

于 2013-06-22T18:41:07.290 回答