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?
Combining static and abstract is somewhat meaningless, yes. The idea behind static is one need not present an instance of the class in order to use the member in question; however with abstract, one expects an instance to be of a derived class that provides a concrete implementation.
I can see why you’d want this sort of combination, but the fact is the only effect would be to deny the implementation use of ‘this’ or any non-static members. That is, the parent class would dictate a restriction in the implementation of the derived class, even though there’s no underlying difference between calling an abstract or ‘static abstract’ member (as both would need a concrete instance to figure out what implementation to use)