对不起,如果这是基本的,但我仍然围绕着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方法是什么?
答案 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
这是因为初始化代码在构造函数中运行,因此必须强制它在执行属性之前运行完成