Tôi muốn tạo thư viện sẽ tạo đối tượng bằng cách sử dụng hàm do người dùng xác định và sửa đổi chúng bằng cách sử dụng hàm do người dùng xác định khác.OO thay thế cho đa hình trong F # khi gọi F # từ C#
Tôi có một nền OCaml và nhìn thấy một cách khá đơn giản để thực hiện nó:
//user side
type userType = { mutable time : float }
let userInitialization() = { time = 0. }
let userModification t = t.time <- t.time+1.
//my side
let algo initialization modification n =
let a = Array.init n (fun _ -> initialization())
modification a.[0]
a
Vấn đề là tôi muốn thư viện mà là dễ dàng để gọi từ C#: có chức năng như các đối số có lẽ là một xấu ý kiến.
Lớp giao diện và lớp trừu tượng (có thể được kế thừa bởi userType
) có vẻ là giải pháp OO thông thường, nhưng tôi không thể khởi tạo đối tượng nếu tôi không biết userType (chưa được xác định) thực hiện bước khởi tạo, bên trong chức năng, không thể.
Cách giải quyết duy nhất mà tôi có thể nghĩ là yêu cầu người dùng cho một phiên bản userType
làm đối số được sử dụng để gọi khởi tạo, nhưng điều đó có vẻ rất không phù hợp.
Có cách nào để giải quyết vấn đề này không?
Hãy giao diện chung chung? –
Nếu bạn mong đợi việc sử dụng C# nặng, bạn có thể tốt hơn với giao diện, nhưng cũng có 'Microsoft.FSharp.Core.FuncConvert' để chuyển đổi giữa C#' Funcs' hoặc 'Actions' và F #' FSharpFuncs'. Bạn có thể sử dụng nó trên C# bên cùng với mã hiện tại của bạn. – scrwtp