I’m looking at a VB.NET class (that I didn’t write) that is declared MustInherit (abstract in C#, I believe) that has three methods, all of which are defined as Shared (static in C#). There are no properties or fields in the class – only the three methods. From an OO perspective, does this make any sense?
My thinking is no, because by making it MustInherit, you’re essentially saying you can’t create an instance of this class – you must inherit from it and create an instance of the derived class. But since all the methods are shared, you’ll never actually create an instance of the parent class anyway, so the MustInherit does no good. You might as well not mark it MustInherit and just inherit from it whenever you want.
Is there a situation where creating a class this way makes sense?
As others have said, it sounds like they really wanted a C# static class. VB’s equivalent to “static” is “shared”, but you can’t mark classes “shared” in VB. The difference is that someone could inherit from this class and then create an instance. C# static classes are sealed.
What they should have done is use a
Module. A VBModuleand C# static class are virtually identical: members are associated with the type rather than an instance and you cannot inherit from them.