class ShapeContravariance
{
class AreaComparer : IComparer<IShape>//比较圆形的面积
{
public int Compare(IShape x, IShape y)
//x {Chapter13.Circle} y {Chapter13.Circle}
{
return x.Area.CompareTo(y.Area);
}
}
static void Main()//使用通用的比较器和逆变性对圆形列表进行排序
{
IComparer<IShape> areaComparer = new AreaComparer();
//areaComparer {Chapter13.ShapeContravariance.AreaComparer}
Shapes.Circles.Sort(areaComparer);//使用逆变性进行排序
}
}
接口的逆变性
使用相同的几何形状类型来演示逆变性。只使用圆形列表,但却需要一个比较器来比较任意两个
图形的面积。在c#4之前,我们无法这样做,因为IComparer<IShape>不能用作IComparer
<Circle>,但逆变性改变了一切。
AreaComparer类差不多是最简单的IComparer<T>实现,例如,它不需要任何状态。
无输出