#f#
#f#
Вопрос:
Это рабочий пример из here:
type MethodExample() =
// standalone method
member this.AddOne x =
x 1
// calls another method
member this.AddTwo x =
this.AddOne x |> this.AddOne
Это то, что я хочу сделать:
type IMethod =
abstract member AddOne: a:int -> int
abstract member AddTwo: a:int -> int
type MethodExample() =
interface IMethod with
member this.AddOne x =
x 1
// calls another method
member this.AddTwo x =
this.AddOne x |> this.AddOne
AddOne
Функция недоступна, я также пытался перенести это в MethodExample, но это ужасно и не работает.
Как я могу это сделать?
Комментарии:
1. Когда я сталкиваюсь с подобной проблемой, я обычно ставлю
AddOne
наMethodExample
, переименовываю на_AddOne
, тогда я могу вызвать это внутри реализации интерфейса. Это может быть некрасиво, но это работает.
Ответ №1:
В F # все реализации интерфейса являются частными, что означает, что методы интерфейса также не отображаются как общедоступные методы класса, как это происходит в C #. Они доступны только через интерфейс.
Следовательно, чтобы получить к ним доступ, вам нужно сначала привести свой класс к интерфейсу:
member this.AddTwo x =
let me = this :> IMethod
me.AddOne x |> me.AddOne