如何选择私人会员和让绑定?

时间:2011-10-15 13:56:42

标签: f#

在编写不需要访问同一类的其他成员的私有方法时,如何在私有成员和let绑定之间进行选择?

  • 我倾向于使用私人会员,因为如果需要,更容易更改辅助功能,但在做出选择时是否还要记住其他方面?
  • 是否将绑定编译为私有成员(这只是一种样式选择)?

3 个答案:

答案 0 :(得分:13)

规范的相关部分是8.6.2部分。它声明:

  

用于在“let”中声明的值的编译表示   类中的绑定是:

     
      
  • 对象构造函数的本地值(如果值为   不是语法功能,不是可变的,不会在任何语法中使用   功能或成员)。

  •   
  • 相应CLI类型中的实例字段(如果值为   不是语法功能,而是在某些功能或成员中使用。)

  •   
  • 相应CLI类型的成员(如果值为a   句法功能)。

  •   

此外:

  

在两个成员中都没有使用的非函数let-bindings   类型或函数绑定被优化掉并成为值   是生成的CLI构造函数的本地。同样,功能   绑定表示为实例成员。

我更喜欢let绑定到私人会员,因为他们更“实用”,即他们强调“什么”而不是“如何”。编译器负责最佳编译形式。

答案 1 :(得分:6)

类中的

let绑定是私有的。我认为let与私有member之间的主要区别在于let绑定无法重载,并且使用name()而不是this.Name()进行调用。因此,我认为这是一种主要的风格选择。

答案 2 :(得分:2)

无法通过类实例访问

let绑定,但private method可以。例如:

type A() =
    let someUtil() = "util code"

    member private this.AnotherUtil() = "anotherUtil"

    member private this.DoSomething() =
       let anotherA = A()
       A.someUtil()  // compilation failed
       A.AnotherUtil() // ok