我决定用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:)
答案 0 :(得分:4)
根据MSDN上的Properties (F#)页面,您可以在您的getter / setter上拥有访问修饰符。您还可以为getter和setter使用不同的访问修饰符(例如,公开get
和私有set
)。
因此,如果您想使用不同的访问修饰符,则需要手动实现支持字段(使用let
)和getter / setter方法。