In F#, a static
keyword is used to make a static field or static method. Static is not the part of an object. It has its own memory space to store static data. It is used to share common properties among objects.
There are two types of static bindings.
static let
BindingThe static let
bindings are part of the static initializer for the class, which is guaranteed to execute before the type is first used.
The following example shows simple static let
bindings.
type Point(a: int, b: int) =
// A static let binding.
static let mutable count = 0
do
count <- count + 1
member this.X = a
member this.Y = b
member this.CreatedCount = count
let point1 = Point(10, 52)
let point2 = Point(10, 52)
printfn "%d %d %d" (point1.X) (point1.Y) (point1.CreatedCount)
printfn "%d %d %d" (point2.X) (point2.Y) (point2.CreatedCount)
static do
BindingThe static do
bindings can reference static members or fields of the enclosing class but not instance members or fields. The static do
bindings become part of the static initializer for the class, which is guaranteed to execute before the class is first used.
The following example shows how to use static do
bindings.
type MyType(a:int, b:int) as this =
inherit Object()
do printfn "Initializing object %d %d" (this.X) (this.Y)
static do printfn "Initializing MyType."
member this.X = a
member this.Y = b
let obj1 = new MyType(1, 2)