I recently discovered that structs in C# can have methods.
Quite accidentally, I found myself to have been using the static method of an empty struct in my code, rather than the static method of a static class that I thought I was working with!
e.g.
public struct Foo
{
public static void Bar(Param param)
{
...
}
}
It’s not really being used as a struct at this point, as it has no properties at all!
Is this very different from using a static method of a class (static or otherwise)? Are there any reasons to prefer one over the other? (My gut tells me that using the static struct method is, at minimum, less intuitive)
No, static members belong to the type and not to instances of the type. There is no difference (neither with respect to performance nor semantics) between declaring static class members and static struct members.
It is important to note that if a type’s only function is to contain static members, you should use a static class instead. With structs, there is an implicit and unchangeable public, no-argument constructor. If the type will not have any instance methods, the ability to create instances should be removed. Declaring a class
staticis the same as declaring itabstract sealed, so developers will not be able to accidentally create instances that have no purpose.