在C#4.0中,是否可以从generics类型参数派生类?
我一直在尝试这个,但我似乎无法解决这个问题。 我想做这个…
public abstract class SingletonType : TBaseClass where TSingleton : TBaseClass, new() where TBaseClass : class { static TSingleton _singleton; public static TSingleton Singleton => _singleton ?? (_singleton = new TSingleton()); }
计划是像这样使用它,它可以在基类周围“包裹”单例模式……
public class SingletonFoo : SingletonType { }
但是,我一直这样做
无法从’TBaseClass’派生,因为它是一个类型参数
嗯……我认为类型正是你从中得到的!
那么我错过了什么?
注意:这当然是一个简单的例子,因为它没有添加任何有用的东西,但是假设SingletonType
有许多与问题无关的其他逻辑,因此忽略了关注手头的问题。
不,这是不可能的。 例如,采用声明为sealed
的类型。 你不能从该类inheritance,并且没有限制来限制非密封类型,ergo试图通过generics参数inheritance它是不可能的。
C#中的generics类型不是C ++模板; 请记住,generics类型必须适用于所有可能的类型参数。 模板只需要适用于您实际构建的结构。
这个问题是重复的; 看到我的回答
为什么C#generics不能像C ++模板中那样从generics类型参数中派生出来?
对此更多的想法。 基本上,简短的回答是,相当大的成本并不会超过该function的小优势。 如果您不喜欢这个答案,请参阅我的第二个答案:
为什么C#generics不能像C ++模板中那样从generics类型参数中派生出来?
如果您不喜欢该答案,请参阅后续问题:
希望.NETgenerics可以inheritance其中一个generics参数类型的理由是什么?
即使涉及generics,每种类型也只有1个真正的离散父类。 即使在处理开放generics类型(例如, typeof(List<>)
)时,您仍然可以找到父类。
如果你想要的是允许的,那就不是真的, typeof(SingletonType<,>
不会有父类型,这是不允许的。
上述就是C#学习教程:在C#4.0中,是否可以从generics类型参数派生类?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1015253.html