這是我的問題。我有這樣的通用 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>
誰能告訴我如何解決這個問題?
uj5u.com熱心網友回復:
由于T
是遞回約束,因此您必須強制任何擴展ProcessManager
的型別將其具體型別映射到T
;
abstract class ProcessManager<T, E> : Singleton<T>
where T : ProcessManager<T, E>, new()
where E : Enum { ... }
class ConcreteType : ProcessManager<ConcreteType, EnumType> { ... }
uj5u.com熱心網友回復:
我嘗試了兩種方法來解決這個問題:
- 洗掉ProcessManager的'abstract'。
- 洗掉Singleton的 ', new() ' 和 new T。
但是第二個沒有意義,所以我最終決定使用第一個..
無論如何,真的非常感謝那些留下評論的好人試圖真誠地幫助我。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/470404.html