我在类中定义了一个属性:
type Customer() =
let mutable _lastName = String.Empty
member val LastName = _lastName with get
在方法QueryData中,我为_lastName:
赋值member self.QueryData () =
// CODE
let addressData = bp.GetStructure("PE_PERSONALDATA")
_lastName <- addressData.GetString("LASTNAME")
null
| RfcCommunication ex ->
let basedComm = ex :> Exception
basedComm
| RfcLogon ex ->
let basedLogon = ex :> Exception
basedLogon
| RfcAbapRuntime ex ->
let basedAbap = ex :> Exception
basedAbap
在main函数中,我创建了一个Customer()实例并读取LastName属性:
[<EntryPoint>]
let main argv =
let customer = CustomerBapi.Customer()
let ex = customer.QueryData()
if ex <> null then printfn "%s" ex.Message
printfn "%s" customer.LastName
结果是空字符串。我试图调试程序,看到_lastName不为空
为什么LastName属性为空?
答案 0 :(得分:5)
您的财产应如下所示:
member this.LastName with get () = _lastName
您正在使用的属性类型是将_lastName
作为值传递给初始化。
来自MSDN的解释:
保存属性数据的私有值称为后备 商店。要让编译器自动创建后备存储, 使用关键字成员val,省略自我标识符,然后提供 表达式初始化属性。如果属性是 可变,包括get,set。例如,以下类类型 包括两个自动实现的属性。 Property1是 只读并初始化为提供给主数据库的参数 构造函数,Property2是一个初始化为的可设置属性 空字符串:
type MyClass(property1 : int) =
member val Property1 = property1
member val Property2 = "" with get, set