Implementing a C# interface with an F# object expression
May 14, 2017 2 Comments
Suppose you have the following C# interface ICalculator with 4 functions:
namespace Project.Domains
{
public interface ICalculator
{
int Add(int x, int y);
int Subtract(int x, int y);
float Divide(float x, float y);
int Multiply(int x, int y);
}
}
We can implement this interface with an F# type like we saw in this post. Another option is to use an object expression. It is useful if we don’t want to create a specific F# type for it. The syntax is very similar to the F# type solution. The implementation is enclosed within curly braces:
open Project.Domains
let calcImplObjExp = { new ICalculator with
member this.Add(x, y) = x + y
member this.Subtract(x, y) = x - y
member this.Divide(x, y) = x / y
member this.Multiply(x, y) = x * y }
let mult = calcImplObjExp.Multiply(4, 5)
Be careful with the indentation and putting the “with” keyword to the right place though. The following won’t work:
let calcImplObjExp = { new ICalculator
with member this.Add(x, y) = x + y
member this.Subtract(x, y) = x - y
member this.Divide(x, y) = x / y
member this.Multiply(x, y) = x * y }
View all F# related articles here.
Pingback: F# Weekly #20, 2017 – Join FableConf in Bordeaux! – Sergey Tihon's Blog
Pingback: F# Weekly #20, 2017 – Join FableConf in Bordeaux! – Sergey Tihon's Blog