I know that in F# if you have a C# class of the format:
public class Person {
public DateTime BirthDate { get; set; }
public string Name { get; set; }
}
You can initialize it like so, which is nice:
let p = new Person (Name = "John", BirthDate = DateTime.Now)
However how would you initialize it in F# if the C# class also had a constructor like this:
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; }
}
Are we forced to use this structure instead?
let p = new Person (123)
p.Name <- "John"
p.BirthDate <- DateTime.Now
Using the equivilent F# syntax for auto properties might look like this. You are able to combine the constructor and property initialization as follows:
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
The System.UriBuilder
BCL class looks like the Person
class in the OP, so I'll use that as an example:
> let ub = UriBuilder("http://blog.ploeh.dk", Path = "about");;
val ub : UriBuilder = http://blog.ploeh.dk:80/about
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With