对象是否可以访问同一类的另一个对象的私有字段/函数?

col*_*ang 6 f#

我知道这在C#中是可行的,它可以生成简单有效的代码.---同一类的两个对象可以访问彼此的私有部分.

class c1
{
    private int A;

    public void test(c1 c)
    {
        c.A = 5;
    }
}
Run Code Online (Sandbox Code Playgroud)

但在F#中似乎不可能,这是真的吗?

type c1()
     let A = 0
     member test (c: c1) = c.A
Run Code Online (Sandbox Code Playgroud)

afr*_*hke 5

有趣的问题.它似乎使用显式字段但不使用let绑定:

// Works
type c1 =
    val private A : int
    new(a) = { A = a }
    member m.test(c : c1) = c.A

let someC1 = new c1(1)
let someMoreC1 = new c1(42);
let theAnswer = someC1.test someMoreC1

// Doesn't work
type c2() =
    let mutable A = 42
    // Compiler error: The field, constructor or member 'A' is not defined
    member m.test(c : c2) = c.A 
Run Code Online (Sandbox Code Playgroud)