C# Generic Abstract class 继承自 Generic Abstract class 传递不同的泛型参数

C# Generic Abstract class inherit from Generic Abstract class that pass different generic parameter

这是我的问题。 我有这样的通用单例 class :

public abstract class Singleton<T> where T : Singleton<T>, new()
{
    private static T instance;
    public static T Instance
    {
        get
        {
            return instance == null ? new T() : instance;
        }
    }
}

我想创建一个 ProcessManager,它也是一个通用抽象 class,但具有继承自此 Singleton class 的枚举通用参数。 这是我目前制作但有错误的代码:

    public abstract class ProcessManager<TEnum> : Singleton<ProcessManager<TEnum>> where TEnum : Enum, new()
    {
        private TEnum state;
        private Dictionary<TEnum, Action> stateInitializations = new Dictionary<TEnum, Action>();

        public TEnum State
        {
            get { return state; }
            set { InitializeState(state); }
        }

        private void InitializeState(TEnum _state)
        {
            stateInitializations[_state].Invoke();
        }
    }

'class ProcessManager' 处有红色下划线,错误 CS0310:

ProcessManager<TEnum> must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'parameter' in the generic type or method Singleton<T>

谁能告诉我如何解决这个问题?

我尝试了两种方法来解决这个问题:

  1. 删除 ProcessManager'abstract'.
  2. 移除Singleton's '、new()'以及新的T.

但是第二个没有意义,所以我最终决定使用第一个..

无论如何,真的很感谢那些发表评论的好心人,他们真诚地帮助了我。

由于 T 是一个递归约束,您必须强制任何扩展 ProcessManager 的类型将其具体类型映射到 T;

abstract class ProcessManager<T, E> : Singleton<T>
    where T : ProcessManager<T, E>, new()
    where E : Enum { ... }

class ConcreteType : ProcessManager<ConcreteType, EnumType> { ... }