Ковариантность и Контрвариантность - что это? - C#
Формулировка задачи:
Прошу помочь мне объяснить эти два понятия, ещё читая Шилдта не понял, что эта за возможность такая, а теперь столкнулся c подобными темами в другой книге, например:
И в чем здесь заключается ковариантность интерфейса?
А уж к контрвариантности обобщенных интерфейсов я и переходить боюсь, застрял на этом теме уже дней 5.Может, вся проблема в том, что я не очень понимаю суть этих 2 магических понятий.
Ковариантность обобщенных интерфейсов:
public interface IIndex<out T>
{
Т this[int index] { get; }
int Count { get; } ,
}
public class RectangleCollection: IIndex<Rectangle>
{
private Rectangle[] data = new Rectangle[3]
{
new Rectangle { Height=2, Width=5},
new Rectangle { Height=3, Width=7},
new Rectangle { Height=4.5, Width=2.9}
};
public static RectangleCollection GetRectangles ()
{
return new RectangleCollection ();
}
public Rectangle this[int index]
{
get
{
if (index < 0 || index > data.Length)
throw new ArgumentOutOfRangeException("index") ;
return data[index];
}
}
public int Count
{
get
{
return data.Length;
}
}
}
static void Main()
{
IIndex<Rectangle> rectangles = RectangleCollection.GetRectangles();
IIndex<Shape> shapes = rectangles;
for (int i = 0; i < shapes.Count; i++)
{
Console.WriteLine(shapes[i]);
}}Решение задачи: «Ковариантность и Контрвариантность - что это?»
textual
Листинг программы
public interface IIndex<T>
{
Т this[int index] { get; set;}
int Count { get; } ,
}