Giả sử có một lớp với một hàm tạo công khai, có một tham số. Ngoài ra, cũng có nhiều thuộc tính công khai mà tôi muốn đặt. Cú pháp cho điều đó trong F # sẽ là gì? Ví dụ trong C#Trong F #, cú pháp khởi tạo đối tượng với tham số hàm khởi tạo là gì?
public class SomeClass
{
public string SomeProperty { get; set; }
public SomeClass(string s)
{ }
}
//And associated usage.
var sc = new SomeClass("") { SomeProperty = "" };
Trong F # tôi có thể thực hiện điều này bằng cách sử dụng các nhà xây dựng hoặc property setters, nhưng không phải cả hai cùng một lúc như trong C#. Ví dụ: thông tin sau đây không hợp lệ
let sc1 = new SomeClass("", SomeProperty = "")
let sc2 = new SomeClass(s = "", SomeProperty = "")
let sc3 = new SomeClass("")(SomeProperty = "")
Có vẻ như tôi đang thiếu thứ gì đó, nhưng sao?
< chỉnh sửa: Như đã chỉ ra bởi David, làm tất cả trong F # công trình, nhưng đối với một số lý do, ít nhất là đối với tôi :), nó được khó khăn khi lớp được sử dụng trong F # được định nghĩa trong C#. Đối với một ví dụ về điều này là TopicDescription (để tạo thành một cái gì đó đủ công cộng như cho một ví dụ thêm). Người ta có thể viết, ví dụ
let t = new TopicDescription("", IsReadOnly = true)
và lỗi trình biên dịch tương ứng sẽ là Method 'set_IsReadOnly' is not accessible from this code location
.
Bạn nói đúng. Điều gì đã dẫn tôi astry là VS của tôi đã không thêm squiggles khi tôi đã cố gắng trong C# '' var td = new TopicDescription ("") {IsReadOnly = true}; ''. Vì vậy, tôi chỉ giả định rằng trong trường hợp này '' TopicDescription'' và một loạt các khởi tạo lớp C# khác sẽ biên dịch. Tôi thật ngốc nghếch! – Veksi