MustInherit and Shared Functions
-
12-09-2019 - |
Question
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?
Solution
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 VB Module
and C# static class are virtually identical: members are associated with the type rather than an instance and you cannot inherit from them.
OTHER TIPS
From an OO perspective, this doesn't make a lot of sense.
However, VB doesn't have a way to flag a class as Shared, like C# does. In C#, you'd likely flag this class as a static class
- the MustInherit was most likely added to try to prevent people from creating an instance of it, even though it's basically a static class.
In C# a class can be declared as static (= Shared), and I think VB.NET doesn't allow that, so as a workaround it is marked abstract (MustInherit) so that it's never instantiated