Sintaxis de inicialización de objetos

99

Estoy empezando con F # y no puedo encontrar la sintaxis para realizar la inicialización de objetos como en C # 3.

Es decir, dado esto:

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

¿cómo escribo lo siguiente en F #:

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

Respuestas:

137

Puedes hacerlo así:

let p = new Person (Name = "John", BirthDate = DateTime.Now)
CMS
fuente
Por convención, new solo se usa con clases desechables.
ShawnMartin
98

la respuesta de CMS es definitivamente correcta. Aquí hay solo una adición que también puede ser útil. En F #, a menudo desea escribir el tipo simplemente usando propiedades inmutables. Cuando se utiliza la sintaxis de "inicializador de objeto", las propiedades deben ser mutables. Una alternativa en F # es usar argumentos con nombre, lo que le brinda una sintaxis similar, pero mantiene las cosas inmutables:

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

Ahora podemos escribir:

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

El código requiere que especifiques el nombre, pero cumpleaños es un argumento opcional con algún valor predeterminado.

Tomas Petricek
fuente
Gracias Tomas, pero en mi caso Person está en otra asamblea y no puedo cambiarlo :(
Mauricio Scheffer