Nesne başlatma sözdizimi


99

F # ile yeni başlıyorum ve C # 3'teki gibi nesne başlatma yapmak için sözdizimini bulamıyorum.

Yani şunu verdim:

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

F # ile aşağıdakileri nasıl yazabilirim:

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

Yanıtlar:


137

Bunu şu şekilde yapabilirsiniz:

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

Geleneksel olarak, yeni yalnızca tek kullanımlık sınıflarda kullanılır.
ShawnMartin

98

CMS'nin cevabı kesinlikle doğrudur. İşte yardımcı olabilecek sadece bir ekleme. F # 'da genellikle türü yalnızca değişmez özellikleri kullanarak yazmak istersiniz. "Nesne başlatıcı" sözdizimi kullanılırken, özelliklerin değiştirilebilir olması gerekir. F # 'da bir alternatif, size benzer bir sözdizimi sağlayan, ancak şeyleri değişmez tutan adlandırılmış bağımsız değişkenleri kullanmaktır:

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

Şimdi yazabiliriz:

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

Kod, adı belirtmenizi gerektirir, ancak doğum günü, bazı varsayılan değerleri olan isteğe bağlı bir bağımsız değişkendir.


Teşekkürler Tomas, ama benim durumumda Kişi başka bir toplantıda ve bunu değiştiremiyorum :(
Mauricio Scheffer

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.