Defining static classes in F#

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#:

[<AbstractClass; Sealed>]
type MyStaticClass private () =
    static member SomeStaticMethod(a, b, c) =
       (a + b + c)

    static member SomeStaticMethod(a, b, c, d) =
       (a + b + c + d)

This might be a little bit of overkill, as both the AbstractClass and 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. The Sealed attribute 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.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)