访问F#构造函数中的属性值

时间:2013-07-15 23:59:44

标签: constructor f#

对不起,如果这是基本的,但我仍然围绕着F#。

我想这样做:

type Person(user:User) as this =
    member val Name = "" with get, set
    user.UserId <- this.Name

但这给了我错误Unexpected identifier in member definition

编译:

type Person(user:User) as this =
    do 
       user.UserId <- this.Name
    member val Name = "" with get, set

但是在运行时给我一个InvalidOperationException

我已经解决了这个问题:

type Person(user:User) =
    member val Name = "" with get, set

    member this.Setup() = 
       user.UserId <- this.Name

但我不想每次都打电话给person.Setup()

最好的F-Sharpy方法是什么?

1 个答案:

答案 0 :(得分:4)

您可以使用显式构造函数来强制初始化成员函数的代码在其他代码之前运行,如下所示

type User() = 
    member val UserId = "" with get,set 
type Person private ()  =
    member val Name = "" with get, set
    new (user:User) as this =
        Person()
        then user.UserId <- this.Name

这是因为初始化代码在构造函数中运行,因此必须强制它在执行属性之前运行完成