Обратите внимание, что вы можете использовать файлы сигнатур для имитации друга.
Если вы хотите, чтобы 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
, но также иметь
// File1.fsi
type B =
new : unit -> B
// do not expose X in the signature
type A =
new : unit -> A
PeekInto : B -> int
, и теперь реализация A
может видеть B.X
, но продолжение программы не может видеть B.X
.
Файлы сигнатур довольно хороши для создания произвольных границ инкапсуляции.