这是我用来将Singleton模式应用于所有派生类的代码。
public abstract class Service<T> where T : Service<T>, new()
{
private static T _instance = null;
public static T I()
{
if (_instance == null)
_instance = new T();
return _instance;
}
}
public class DerivedService : Service<DerivedService>
{
public DerivedService() { ... }
}
public class CustomService : DerivedService { ... }
因此,当我使用代码CustomService.I();
时,类型为DerivedService
而不是CustomService
编辑:我将其修改为无效。 (我很抱歉)CustomService
,如(CustomService)CustomService.I()
。
有没有更好的方法可以不进行投射?任何想法,任何建议?
答案 0 :(得分:1)
问题源于Derived类继承如下: DerivedService:服务&lt; DerivedService &gt;如果你想让课程成功,你可以这样写:
public class DerivedService<T> : Service<T> where T : DerivedService<T>, new
{
{ ... }
}