这是我的问题。我有这样的通用Singleton类:
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,它也是一个泛型抽象类,但是具有从这个Singleton类继承的枚举泛型参数。这是我目前编写的代码,但有错误:
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>
必须是具有公共无参数构造函数的非抽象类型,才能将其用作泛型类型或方法Singleton<T>
中的参数“参数”。
有人能告诉我怎么解决这个问题吗?
发布于 2022-05-04 06:31:52
因为T
是一个递归约束,所以必须强制任何扩展ProcessManager
的类型将它们的具体类型映射到T
上;
abstract class ProcessManager<T, E> : Singleton<T>
where T : ProcessManager<T, E>, new()
where E : Enum { ... }
class ConcreteType : ProcessManager<ConcreteType, EnumType> { ... }
发布于 2022-05-04 06:24:44
我试着用两种方法来解决这个问题:
删除ProcessManager's 'abstract'.
但是第二个没有道理,所以我最终决定用第一个。
总之,非常感谢那些离开评论的好人,他们真诚地帮助了我。
https://stackoverflow.com/questions/72096680
复制相似问题