Ковариантность и Контрвариантность - что это? - 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; } ,
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д