56得票4回答
协变性和IList

我希望有一个协变的集合,可以通过索引检索其项。IEnumerable是我所知道的唯一协变的.NET集合,但它不支持索引。 具体来说,我想做到这一点:List<Dog> dogs = new List<Dog>(); IEnumerable<Animal>...

53得票3回答
泛型:List<? extends Animal> 和 List<Animal> 一样吗?

我只是想了解Java泛型中的extends关键字。 List&lt;? extends Animal&gt;表示我们可以将任何属于Animal的对象放入List中。 那么下面的内容也不是同样的意思吗:List&lt;Animal&gt; 有人可以帮我了解上面两者之间的区别吗?对我来说,ex...

51得票1回答
Python中的typing模块,TypeVar(A, B, covariant=True)是什么意思?

今天我深入研究了Liskov替换原则和协变/逆变。 我卡在以下两种方式的区别上: T = TypeVar("T", bound=Union[A, B]) T = TypeVar("T", A, B, covariant=True) #1的理解 TypeVar('T', A, B...

46得票3回答
T 必须是逆变有效的。

这有什么问题吗? interface IRepository&lt;out T&gt; where T : IBusinessEntity { IQueryable&lt;T&gt; GetAll(); void Save(T t); void Delete(T t)...

46得票9回答
我可以用派生类型来进行覆盖吗?

据我所知,在C# 2.0中无法实现以下操作。public class Father { public virtual Father SomePropertyName { get { return this; ...

44得票3回答
为什么在C#4中将IEnumerable<T>协变化?

在C#的早期版本中,IEnumerable的定义如下:public interface IEnumerable&lt;T&gt; : IEnumerable 自从C# 4以来,定义如下:public interface IEnumerable&lt;out T&gt; : IEnumerabl...

44得票5回答
泛型类型参数的协变性和多接口实现

如果我有一个带有协变类型参数的通用接口,就像这样: interface IGeneric&lt;out T&gt; { string GetName(); } 如果我定义了这个类层次结构: class Base {} class Derived1 : Base{} class ...

44得票5回答
C#:协变性(Covariance)/逆变性(Contravariance)是多态性的另一个说法吗?

我正在尝试从几篇在线文章和StackOverflow上的问题中弄清楚单词Covariance和Contravariance的确切含义,从我所理解的来看,它只是多态性的另一种说法。 我的上述陈述是否正确?还是我理解错了?

43得票5回答
反变(Contravariance)解释

首先,我已经阅读了许多关于协变和逆变的解释,感谢Eric Lippert制作了如此出色的协变和逆变系列文章。然而,我有一个更具体的问题需要理解。据Eric的解释,协变和逆变都是描述转换的形容词。协变转换是保留类型顺序的转换,而逆变转换则是颠倒它。我理解协变的方式是,我认为大多数开发人员都可以直...

42得票3回答
协变和逆变的简单示例

有人能为我提供简单的C#协变、逆变、不变和反协变的示例吗(如果存在这样的东西)。 到目前为止,我看到的所有示例都只是将某些对象转换为 System.Object。