I want to do the following
public abstract class MyAbstractClass
{
    public static abstract int MagicId
    {
        get;
    }
    public static void DoSomeMagic()
    {
        // Need to get the MagicId value defined in the concrete implementation
    }
}
public class MyConcreteClass : MyAbstractClass
{
    public static override int MagicId
    {
        get { return 123; }
    }
}
However I can't because you can't have static abstract members.
I understand why I can't do this - any recommendations for a design that will achieve much the same result?
(For clarity - I am trying to provide a library with an abstract base class but the concrete versions MUST implement a few properties/methods themselves and yes, there are good reasons for keeping it static.)
 
     
     
     
     
     
     
     
     
     
    