使用F#的私有/受保护的setter

时间:2013-06-22 18:21:57

标签: nhibernate f# functional-programming c#-to-f#

我决定用F#和MVC4以及Nhibernate进行一个相对较大的项目。

现在,在C#中,我对ORM的惯常做法是为某些属性设置私有设置器(例如自动递增/标识属性,时间戳等)。即

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中将protected替换为protected:)

1 个答案:

答案 0 :(得分:4)

根据MSDN上的Properties (F#)页面,您可以在您的getter / setter上拥有访问修饰符。您还可以为getter和setter使用不同的访问修饰符(例如,公开get和私有set)。

因此,如果您想使用不同的访问修饰符,则需要手动实现支持字段(使用let)和getter / setter方法。