这种限制的真正原因是什么?只是必须完成的工作吗?概念上很难吗?这是不可能的吗?
当然,不能在字段中使用类型参数,因为它们始终是可读写的。但这不可能是答案,不是吗?
这个问题的原因是我正在写一篇关于 C# 4 中的方差支持的文章,我觉得我应该解释一下为什么它仅限于委托和接口。只是为了颠倒举证责任。
更新: 埃里克问了一个例子。
这个怎么样(不知道这是否有意义,但是:-))
public class Lookup<out T> where T : Animal {
public T Find(string name) {
Animal a = _cache.FindAnimalByName(name);
return a as T;
}
}
var findReptiles = new Lookup<Reptile>();
Lookup<Animal> findAnimals = findReptiles;
将它放在一个类中的原因可能是类本身中保存的缓存。并且请不要将您不同类型的宠物命名相同!
顺便说一句,这让我想到了 C# 5.0 中的可选类型参数 :-)
更新 2:我没有声称 CLR 和 C# 应该允许这样做。只是试图了解导致它没有的原因。