una - tipos de constructores en java




Inicialización de objetos F#con un constructor (2)

La clase System.UriBuilder BCL se parece a la clase Person en el OP, así que lo usaré como ejemplo:

> let ub = UriBuilder("http://blog.ploeh.dk", Path = "about");;    
val ub : UriBuilder = http://blog.ploeh.dk:80/about

Sé que en F # si tienes una clase C # del formato:

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

Puedes inicializarlo así, lo cual es bueno:

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

Sin embargo, ¿cómo lo inicializaría en F # si la clase C # también tuviera un constructor como este?

public class Person {
    public Person(int id)
    {
        Id = id
    }

    public int Id {get; private set;}
    public DateTime BirthDate { get; set; }
    public string Name { get; set; }
}

¿Estamos obligados a usar esta estructura en su lugar?

let p = new Person (123)
p.Name <- "John"
p.BirthDate <- DateTime.Now

Usar la sintaxis equivalente de F # para las propiedades automáticas podría verse así. Puede combinar la inicialización del constructor y la propiedad de la siguiente manera:

type Person(id : int) =
    member val Id = id with get,set
    member val BirthDate = DateTime.MinValue with get,set
    member val Name = "" with get,set

let p = Person(5, Name = "Stu")
p |> Dump




initialization