Is it possible to define a static class that contains overloadable members in F#? let module bindings cannot be overloaded, even though they are compiled into static members in static classes.
type declarations can contain static members, but I don’t know if the type itself can be made static.
My current solution is to define a type with a private constructor and just use that. I’m wondering if there is a way I can define a static type as I want.
As Robert Jeppeson pointed out, a “static class” in C# is just short-hand for making a class that cannot be instantiated or inherited from, and has only static members. Here’s how you can accomplish exactly that in F#:
This might be a little bit of overkill, as both the
AbstractClassand the private constructor will prevent you from creating an instance of the class, however, this is what C# static classes do – they are compiled to an abstract class with a private constructor. TheSealedattribute prevents you from inheriting from this class.This technique won’t cause a compiler error if you add instance methods the way it would in C#, but from a caller’s point of view there is no difference.