Как создать экземпляр класса и заполнить свойства в F #? - PullRequest
3 голосов
/ 07 февраля 2011

В C # я могу:

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

Могу ли я сделать то же самое в F #?Я имею в виду, чтобы создать класс и , укажите некоторые свойства.

Ответы [ 3 ]

14 голосов
/ 07 февраля 2011

Да

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

Обратите внимание, что подход F # на самом деле гораздо более гибок, чем подход C #, в котором вы можете использовать "post hoc" присваивания свойств с любым вызовом метода (не только конструкторами). Например, если тип Person имеет статический метод с именем CreatePerson : string -> Person, который создает нового человека и присваивает имя, вы также можете использовать его следующим образом:

let n = Person.CreatePerson("John", LastName = "Smith")
3 голосов
/ 07 февраля 2011

F # также имеет записей , которые в основном являются классами с автоматически предоставляемыми свойствами, которые предназначены для представления простых агрегатов именованных значений, необязательно с членами.

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

let p = {FirstName = "John"; LastName = "Smith"}
2 голосов
/ 07 февраля 2011
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")
...