2008-12-16 21 views
79

Sadece F # ile başlıyorum ve C# 3 gibi bir nesne başlatması yapmak için sözdizimini bulamıyorum.Nesne başlatma sözdizimi

I.e. Verilen bu:

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

nasıl yazıyorum F # aşağıdadır:

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

cevap

108

Böyle yapabilirsiniz:

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

CMS'den cevabı kesinlikle doğrudur. İşte size yardımcı olabilecek sadece bir ek. F # 'da, genellikle yalnızca immutable özelliklerini kullanarak yazmak istersiniz. "Object initializer" sözdizimini kullanırken, özelliklerin değişebilir olması gerekir. F # alternatif size benzer bir sözdizimi veren argümanlar adlı kullanmak için, ama değişmez şeyler tutar:

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ını belirtmenizi gerektirir, ancak doğum günü, bazı varsayılan değerlere sahip isteğe bağlı bir argümandır.

+0

Tomas'a teşekkürler, ama benim durumumda Kişi başka bir mecliste ve bunu değiştiremiyorum :( –