Cú pháp khởi tạo đối tượng


99

Tôi mới bắt đầu với F # và tôi không thể tìm thấy cú pháp để thực hiện khởi tạo đối tượng như trong C # 3.

Tức là đã đưa ra cái này:

public class Person {
  public DateTime BirthDate { get; set; }
  public string Name { get; set; }
}

làm cách nào để viết những điều sau trong F #:

var p = new Person { Name = "John", BirthDate = DateTime.Now };

Câu trả lời:


137

Bạn có thể làm như thế này:

let p = new Person (Name = "John", BirthDate = DateTime.Now)

Theo quy ước, new chỉ được sử dụng với các lớp dùng một lần.
ShawnMartin

98

câu trả lời từ CMS chắc chắn là chính xác. Đây chỉ là một bổ sung có thể hữu ích. Trong F #, bạn thường muốn viết kiểu chỉ sử dụng thuộc tính không thay đổi. Khi sử dụng cú pháp "đối tượng khởi tạo", các thuộc tính phải có thể thay đổi được. Một thay thế trong F # là sử dụng các đối số được đặt tên, cung cấp cho bạn cú pháp tương tự, nhưng giữ cho mọi thứ không thay đổi:

type Person(name:string, ?birthDate) =
  member x.Name = name
  member x.BirthDate = defaultArg birthDate System.DateTime.MinValue

Bây giờ chúng ta có thể viết:

let p1 = new Person(name="John", birthDate=DateTime.Now)
let p2 = new Person(name="John")

Mã yêu cầu bạn chỉ định tên, nhưng ngày sinh là một đối số tùy chọn với một số giá trị mặc định.


Cảm ơn Tomas, nhưng trong trường hợp của tôi Person là trong một lắp ráp và tôi không thể thay đổi nó :(
Mauricio Scheffer

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.