none
Какой-то странный пример ковариантности в структуре RRS feed

  • Вопрос


  • using System; // Ковариантность не применима к массивам элементов структурных типов.

    namespace ArrayCovariant { public interface IAnimal { void Voice(); } public struct Dog : IAnimal { public void Voice() { Console.WriteLine("Gav-Gav"); } } class Program { static void Main() { // 1 Dog[] dogs = { new Dog(), new Dog(), new Dog() }; //IAnimal[] animal = dogs; // Ковариантность. //dogs = array; // Контрвариантность. ValueType i = new Int32() as ValueType; // 2 int[] vector = new int[3] { 1, 2, 3 };


                // Задержка.
                Console.ReadKey();
            }
        }
    }

    меня в данном примере смущает коментарий контрвариантности:

    //dogs = array;  // Контрвариантность.

    (которой в "чистом виде" в c# нет), но есть явное приведение:

    dogs=(Dog[])animal

    смущает сама строка(т.к такой "чистой" ковариантности нет в c#), да еще и что поля array вообще нет в коде;  т.е. я вообще не могу понять к чему тут этот коментарий? 

    и еще, в чем роль данной строки в примере?

    ValueType i = new Int32() as ValueType;
    Ведь по-существу как я понял мы приводим структурный тип(Int32) к базовому абстрактному классу.

    ПРОШУ ОБРАТИТЬ ВНИМАНИЕ, ЧТО ДАННЫЙ КОД НЕ МОЙ, А УЧЕБНЫЙ!


    • Изменено BadCatss 26 января 2016 г. 17:00 редактировал название
    26 января 2016 г. 15:14

Ответы

Все ответы