如何在F#中创建类实例并填充属性?

时间:2011-02-07 16:25:10

标签: syntax f# c#-to-f#

在C#中,我可以:

var n = new Person()
{
     FirstName = "John",
     LastName = "Smith"
};

我可以在F#中做同样的事情吗?我的意思是,创建一个类指定一些属性。

3 个答案:

答案 0 :(得分:14)

是:

let n = Person(FirstName = "John", LastName = "Smith")

请注意,F#方法实际上比C#方法更灵活,因为您可以使用任何方法调用(而不仅仅是构造函数)来使用“post hoc”属性赋值。例如,如果Person类型有一个名为CreatePerson : string -> Person的静态方法,它创建一个新人并指定名字,您也可以使用它:

let n = Person.CreatePerson("John", LastName = "Smith")

答案 1 :(得分:3)

F#也有records,它们基本上是具有自动公开属性的类,用于表示命名值的简单聚合,可选择包含成员。

type Person = {
    FirstName : string;
    LastName : string;
}

let p = {FirstName = "John"; LastName = "Smith"}

答案 2 :(得分:2)

type Person() =

    [<DefaultValue>]
    val mutable firstName : string

    [<DefaultValue>]
    val mutable lastName : string

    member x.FirstName 
        with get() = x.firstName 
        and set(v) = x.firstName <- v

    member x.LastName 
        with get() = x.lastName 
        and set(v) = x.lastName <- v

let p = new Person(FirstName = "Nyi", LastName = "Than")