Jac*_*yan 9 c# generics covariance
我经常发现自己处于一种情况,我创建了一个通用接口或类,然后想要以非通用的方式使用这个类或接口的不同版本.例如,我可能有这样的界面:
interface ICanCreate<T>
{
T NewObject();
}
Run Code Online (Sandbox Code Playgroud)
这允许类成为该类型的工厂.然后我想用一般的工厂类注册这些,所以我尝试写这样的东西:
public class Factory
{
private Dictionary<Type, ICanCreate> mappings; // what do I put here????
public void RegisterCreator<T>(ICanCreate<T> creator)
{
}
public T Create<T>()
{
}
}
Run Code Online (Sandbox Code Playgroud)
在字典中我使用哪种类型的价值?我不知道我是否缺少某种设计原则,我知道这与co(ntra?)方差有很大关系.任何帮助或想法将不胜感激.
Jon*_*eet 11
你要么只是object在你的字典声明中使用它(它都是私有的,你可以验证你永远不会把错误的东西放在那里)或声明一个扩展的非泛型ICanCreate接口ICanCreate<T>.
基本上你想要一个无法在C#中表达的类型关系 - 无论何时发生这种情况,你最终会得到一个稍微不愉快的解决方案,但看起来你可以在这里孤立丑陋(即将它保持在单个类中).
| 归档时间: |
|
| 查看次数: |
1696 次 |
| 最近记录: |