Sintaks inisialisasi objek

99

Saya baru memulai dengan F # dan saya tidak dapat menemukan sintaks untuk melakukan inisialisasi objek seperti di C # 3.

Yaitu diberikan ini:

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

bagaimana cara menulis yang berikut di F #:

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

Jawaban:

137

Anda bisa melakukannya seperti ini:

let p = new Person (Name = "John", BirthDate = DateTime.Now)
CMS
sumber
Menurut konvensi, new hanya digunakan dengan kelas sekali pakai.
ShawnMartin
98

jawaban dari CMS pasti benar. Berikut ini hanya satu tambahan yang mungkin bisa membantu. Di F #, Anda sering ingin menulis tipe hanya menggunakan properti yang tidak dapat diubah. Saat menggunakan sintaks "object initializer", propertinya harus bisa berubah. Alternatif di F # adalah dengan menggunakan argumen bernama, yang memberi Anda sintaks yang serupa, tetapi menjaga semuanya tetap:

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

Sekarang kita bisa menulis:

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

Kode mengharuskan Anda untuk menentukan namanya, tetapi ulang tahun adalah argumen opsional dengan beberapa nilai default.

Tomas Petricek
sumber
Terima kasih Tomas, tetapi dalam kasus saya, Orang ada di majelis lain dan saya tidak dapat mengubahnya :(
Mauricio Scheffer