Tôi gặp khó khăn để chuyển đổi sau mã C# để F #:nhiều nhà xây dựng, thừa kế lớp trong 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; }
}
đầu tiên tôi đã cố gắng sau, nhưng nó được báo cáo lỗi
Constructors cho các loại ' Bar 'phải trực tiếp hoặc gián tiếp gọi hàm xây dựng đối tượng ẩn của nó là . Sử dụng lệnh gọi đối tượng ẩn hàm tạo thay vì biểu thức ghi.
type Foo() =
new(name:string) = Foo()
type Bar() =
inherit Foo()
new(name:string) = { inherit Foo(name) }
member val Name:string = null with get, set
Sau đó, tôi đã cố gắng sau, nhưng nó bây giờ được báo cáo lỗi trên thuộc tính tự động
định nghĩa 'thành viên val' chỉ được phép trong các loại với một constructor chính. Hãy xem xét thêm lập luận để định nghĩa kiểu của bạn"
type Foo() =
new(name:string) = Foo()
type Bar =
inherit Foo
new(name:string) = { inherit Foo(name) }
member val Name:string = null with get, set
Trong trường hợp này bạn vẫn không thể thêm sau đây: thành viên val Tên = null với get, thiết lập – wangzq
Có, tôi giám sát điều đó. Tôi đã chỉnh sửa lớp Bar để bao gồm một thuộc tính Name. Nó không phải là thuộc tính tự động, nhưng API và ngữ nghĩa chính xác giống như trong trường hợp C#. Không có cách nào khác để tái tạo ví dụ C# của bạn "thành chữ". –
Đồng ý; đây là cách giải quyết gần nhất tại thời điểm hiện tại. – wangzq