Ваш класс 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)