I recently ran into a problem where it seems I need a 'static abstract' method. I know why it is impossible, but how can I work around this limitation?
For example I have an abstract class which has a description string. Since this string is common for all instances, it is marked as static, but I want to require that all classes derived from this class provide their own Description property so I marked it as abstract:
abstract class AbstractBase
{
...
public static abstract string Description{get;}
...
}
It won't compile of course. I thought of using interfaces but interfaces may not contain static method signatures.
Should I make it simply non-static, and always get an instance to get that class specific information?
Any ideas?
A possible workaround is to define a Singleton of your derived class in your base class with the help of Generics.
The trick is to tell your
AbstractBase<T>
some details about howDerivedClass
is implemented:where T: new()
so it can create a Singleton instancewhere T : AbstractBase<T>
so it knows that there will be a implementation ofDescription
This way
_instance
contains theDescription
field which can be called in the static MethodGetDescription()
. This forces you to overwriteDescription
in yourDerivedClass
and allows you to call its value withDerivedClass.GetDescription()