Я с трудом преобразовать следующие C# код для F #:несколько конструкторов и наследование классов в F #
class Foo
{
public Foo() { }
public Foo(string name) { }
}
class Bar : Foo
{
public Bar() : base() { }
public Bar(string name) : base(name) { }
public string Name { get; set; }
}
я первый попытался следующим, но сообщение об ошибке и
Конструкторов для типа ' Bar 'должен прямо или косвенно вызвать свой конструктор неявного объекта . Используйте вызов неявного объекта вместо выражения записи.
type Foo() =
new(name:string) = Foo()
type Bar() =
inherit Foo()
new(name:string) = { inherit Foo(name) }
member val Name:string = null with get, set
Затем я попытался следующие, но теперь сообщает об ошибке на авто собственности
определения «члена VAL» допускается только в типах с первичным конструктору. Попробуйте добавить аргументы вашего определения типа»
type Foo() =
new(name:string) = Foo()
type Bar =
inherit Foo
new(name:string) = { inherit Foo(name) }
member val Name:string = null with get, set
В этом случае вы по-прежнему не можете добавить следующее: member val Name = null with get, set – wangzq
Да, я это наблюдал. Я редактировал класс Bar, чтобы включить свойство Name. Это не авто-свойство, но API и семантика точно такие же, как в случае с C#. Другого способа воспроизведения вашего примера C# «на букву» нет. –
Согласен; это ближайший обходной момент в настоящий момент. – wangzq