A delegate represents a function call as an object. A delegate is a reference type variable that holds the reference to a method. The reference can be changed at runtime.
The basic syntax of Delegate in F# is as follows.
type delegate-typename = delegate of type1 -> type2
type1 represents the argument type or types, and
type2 represents the return type. The argument types that are represented by
type1 are automatically curried.
The following code shows a simple usage of a delegate.
type Deligate() = static member add(a : int, b : int) = a + b member x.Add(a : int, b : int) = a + b type Multiply = delegate of (int * int) -> int let getIt (d : Multiply) (a : int) (b: int) = d.Invoke(a, b) let d : Multiply = new Multiply( Deligate.add ) for (a, b) in [(5, 8) ] do printfn "%d + %d = %d" a b (getIt d a b)
The following code shows some of the different ways you can work with delegates.
type Delegate1 = delegate of int * char -> string let replicate n c = String.replicate n (string c) let function1 = replicate let delObject = Delegate1(function1) let functionValue = delObject.Invoke List.map (fun c -> functionValue(5,c)) ['a'; 'b'; 'c']|> List.iter (printfn "%s") let replicate' n c = delObject.Invoke(n,c) let stringArray = System.Array.ConvertAll([|'a';'b'|], fun c -> replicate' 3 c) printfn "%A" stringArray