F#中的类级别和成员级别自标识符之间是否存在语义差异?例如,考虑这个类:
type MyClass2(dataIn) as self =
let data = dataIn
do
self.PrintMessage()
member this.Data = data
member this.PrintMessage() =
printfn "Creating MyClass2 with Data %d" this.Data
Run Code Online (Sandbox Code Playgroud)
与本课程相比:
type MyClass2(dataIn) as self =
let data = dataIn
do
self.PrintMessage()
member this.Data = data
member this.PrintMessage() =
printfn "Creating MyClass2 with Data %d" self.Data
Run Code Online (Sandbox Code Playgroud)
唯一的区别是PrintMessage的实现引用this了一个与self另一个.语义有什么不同吗?如果没有,是否有一种风格上的理由偏爱一个而不是另一个?
两者之间没有真正的语义差异.根据经验,我建议您使用第一个示例 - 更喜欢范围更接近的标识符,以便以后更容易阅读和重构代码.作为旁注,人们通常会this同时使用类和成员级标识符,在这种情况下,成员级别的一个会影响类级别的标识符.
在这种情况下,查看像ILSpy这样的反汇编程序中的编译代码很有用.如果你这样做,你会发现唯一的区别是插入一个额外的空检查self.Data.
另一方面,使用类级别标识符的类与不使用类级别标识符的类(将一系列初始化检查插入到所有类成员中)之间存在差异.如果可能的话,最好避免使用它们,并且可以将您的示例重写为不需要它.