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