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>
谁能告诉我如何解决这个问题?
我尝试了两种方法来解决这个问题:
- 删除 ProcessManager 的 'abstract'.
- 移除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> { ... }
这是我的问题。 我有这样的通用单例 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 methodSingleton<T>
谁能告诉我如何解决这个问题?
我尝试了两种方法来解决这个问题:
- 删除 ProcessManager 的 'abstract'.
- 移除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> { ... }