F#朋友功能/类

Neo*_*Neo 3 oop f# friend

是否可以在F#中实现友元函数和朋友类(如c ++)?

更新:由于f#中没有友元函数/类,而朋友甚至不是未来扩展的保留关键字,我想知道F#中的朋友机制是否有任何问题导致开发人员决定不实现它? (例如在"受保护的"访问修饰符中).

建议1:Brian,签名文件 - 我认为这件事情不正常.如果你有一个闭包(例如A中的lambda表达式,它是一个与A的实例不同的对象)来评估BX,它将无法工作

建议2:Massif(+ Mitya0),InternalsVisibleTo - 我不清楚,你是在第二课中写这个还是将课程暴露给整个集会?

Bri*_*ian 11

请注意,您可以使用签名文件来模仿朋友.

如果你想A成为朋友B,那么A可以访问B其他人无法看到的内部,你可以做到例如

// File1.fs
type B() =
    let x = 42  // private field
    member this.X = x // public getter

type A() =
    member this.PeekInto(b : B) =
        b.X
Run Code Online (Sandbox Code Playgroud)

但也有

// File1.fsi
type B = 
    new : unit -> B
    // do not expose X in the signature

type A = 
    new : unit -> A
    PeekInto : B -> int
Run Code Online (Sandbox Code Playgroud)

而现在A的实现可以看到,B.X但该程序的续集无法看到B.X.

签名文件非常适合创建任意封装边界.