I have two very similar static classes, that I would believe should share the same code base, but I keep running in to limitations in c#.
Interfaces can't declare static methods, static methods can't be virtual etc.
Ultimately I just want a nicer looking version of the following:
public class StaticCoroutine {
    private static MonoBehaviour runner;
    public static void Start(IEnumerator coroutine) {
        if (runner == null) {
            runner = new GameObject("[Static Coroutine Runner]").AddComponent<StaticCoroutineRunner>();
        }
        runner.StartCoroutine(coroutine);
    }
    public static void Stop(IEnumerator coroutine) {
        if (runner != null) runner.StopCoroutine(coroutine);
    }
}
public class StaticCoroutineInfinite {
    private static MonoBehaviour runner;
    public static void Start(IEnumerator coroutine) {
        if (runner == null) {
            runner = new GameObject("[Static Coroutine Infinite Runner]").AddComponent<StaticCoroutineRunner>();
            Object.DontDestroyOnLoad(runner.GameObject);
        }
        runner.StartCoroutine(coroutine);
    }
    public static void Stop(IEnumerator coroutine) {
        if (runner != null) runner.StopCoroutine(coroutine);
    }
}
 
     
    