Ваш класс C # использует параметры со значением по умолчанию, который немного отличается от перегруженных конструкторов. В любом случае F # поддерживает как перегруженные конструкторы, так и параметры по умолчанию.
Используя значения по умолчанию для параметров, код будет выглядеть так:
type SharedRegistry(?useCache: bool) =
do
// constructor logic
inherit PageRegistry(defaultArg useCache true)
Теперь вы можете создать экземпляр следующим образом:
let r1 = new SharedRegistry() // using the default value
let r2 = new SharedRegistry(false) // specified explicitly
let r3 = new SharedRegistry(useCache=false) // using named parameter
Я верю, что использование именованных параметров немного более элегантно в F #. Способ, которым он работает, заключается в том, что параметр useCache
становится option<bool>
под обложкой (это может быть проблемой, если вы хотите использовать класс из C #)
Что касается перегруженных конструкторов - ваш код F # должен (см. ответ из kvb ). В общем случае, вероятно, лучше иметь хотя бы один неявный конструктор (так как это позволяет вам автоматически обращаться к параметрам конструктора внутри тела класса, объявлять поля с помощью let
и реализовывать логику конструктора с помощью do
). Неявный конструктор должен быть тем, который принимает все параметры. В некоторых случаях вы можете сделать это частным, что можно сделать следующим образом:
type SharedRegistry private (useCache: bool) =
inherit PageRegistry(useCache)
do
// constructor logic
new () = SharedRegistry(true)