Mar*_*eIV 24 c# generics inheritance subclass derived-class
我一直在尝试这个,但我似乎无法解决这个问题.我想做这个...
public abstract class SingletonType<TSingleton, TBaseClass> : TBaseClass
where TSingleton : TBaseClass, new()
where TBaseClass : class
{
static TSingleton _singleton;
public static TSingleton Singleton
=> _singleton ?? (_singleton = new TSingleton());
}
Run Code Online (Sandbox Code Playgroud)
计划是像这样使用它,它可以在基类周围"包裹"单例模式......
public class SingletonFoo : SingletonType<SingletonFoo, Foo> {
}
Run Code Online (Sandbox Code Playgroud)
但是,我一直这样做
无法从'TBaseClass'派生,因为它是一个类型参数
嗯...我想类型为你到底是什么做的派生!
那我错过了什么?
注意:这当然是一个简单的例子,因为它没有添加任何有用的东西,但是假设SingletonType有许多其他逻辑与问题无关,因此忽略了关注手头的问题.
Eri*_*ert 27
C#中的泛型类型不是C++模板; 请记住,泛型类型必须适用于所有可能的类型参数.模板只需要适用于您实际构建的结构.
这个问题是重复的; 看到我的回答
为什么C#泛型不能像C++模板中那样从泛型类型参数中派生出来?
对此更多的想法.基本上,简短的回答是,相当大的成本并没有超过该功能的小优势.如果你不喜欢这个答案,请看我的第二个答案:
为什么C#泛型不能像C++模板中那样从泛型类型参数中派生出来?
如果您不喜欢该答案,请参阅后续问题:
Tej*_*ejs 19
不,这是不可能的.例如,采用声明的类型sealed.你不能从该类继承,并且没有约束限制非密封类型,ergo试图通过泛型参数继承它是不可能的.