Exemple #1
0
    static void Main()
    {
        Y        Yob    = new Y();
        ChangeIt change = IncrA;
        X        Xob    = change(Yob);

        Console.WriteLine("Xob: " + Xob.Val);
        change = IncrB;
        Yob    = (Y)change(Yob);
        Console.WriteLine("Yob: " + Yob.Val);
    }
Exemple #2
0
        static void Main()
        {
            Y Yob = new Y();
            // В данном случае параметром метода IncrA является объект класса X,
            // а параметром делегата ChangeIt — объект класса Y. Но благодаря
            // контравариантности следующая строка кода вполне допустима.
            ChangeIt change = IncrA;
            X        Xob    = change(Yob);

            Console.WriteLine("Xob: " + Xob.Val);
            // В этом случае возвращаемым типом метода IncrB служит объект класса Y,
            // а возвращаемым типом делегата ChangeIt — объект класса X. Но благодаря
            // ковариантности следующая строка кода оказывается вполне допустимой.
            change = IncrB;

            Yob = (Y)change(Yob);

            Console.WriteLine("Yob: " + Yob.Val);
        }
        static void Main(string[] args)
        {
            Y Yob = new Y();

            /* в данном случае параметром метода IncrA является объект класса X, а параметром делегата ChangeIt - объект класса Y. Но благодаря контравариантности
             * следующая строка кода вполне допустима*/
            ChangeIt change = IncrA;
            X        Xob    = change(Yob);

            Console.WriteLine("Xob: " + Xob.val);

            /* В этом случае вовзращаемым типом метода IncrB служит объект класса Y, а возвращаемым типом делегата ChangeIt - объект класса X. Но благодаря ковариантности
             * следующая строка кода оказывается вполне допустимой*/
            change = IncrB;
            Yob    = (Y)change(Yob);
            Console.WriteLine("Yob: " + Yob.val);

            /* приведение типов на 43 строке нужно для того, чтобы соответствовать сигнатуре делегата */
        }
Exemple #4
0
    static void Main()
    {
        Y Yob = new Y();
        // In this case, the parameter to IncrA
        // is X and the parameter to ChangeIt is Y.
        // Because of contravariance, the following
        // line is OK.
        ChangeIt change = IncrA;
        X        Xob    = change(Yob);

        Console.WriteLine("Xob: " + Xob.Val);
        // In the next case, the return type of
        // IncrB is Y and the return type of
        // ChangeIt is X. Because of covariance,
        // the following line is OK.
        change = IncrB;
        Yob    = (Y)change(Yob);
        Console.WriteLine("Yob: " + Yob.Val);
    }