Esempio n. 1
0
    public static void Main()
    {
        SomeOp <int> intDel = sum;

        Console.WriteLine(intDel(3));

        SomeOp <string> strDel = reflect;

        Console.WriteLine(strDel("Hello"));
    }
Esempio n. 2
0
        static void Main(string[] args)
        {
            GenDelegateDemo x     = new GenDelegateDemo();
            SomeOp <int>    indel = x.Sum;

            Console.WriteLine(indel(6));

            SomeOp <string> strDel = x.reflect;

            Console.WriteLine(strDel("I am hungry"));
        }
    static void Main()
    {
        // Construct an int delegate.
        SomeOp <int> intDel = Sum;

        Console.WriteLine(intDel(3));

        // Construct a string delegate.
        SomeOp <string> strDel = Reflect;

        Console.WriteLine(strDel("Hello"));
    }
Esempio n. 4
0
        static void Main()
        {
            // Сконструировать делегат типа int.
            SomeOp <int> intDel = Sum;

            Console.WriteLine(intDel(3));

            // Сконструировать делегат типа string.
            SomeOp <string> strDel = Reflect;

            Console.WriteLine(strDel("Привет"));
        }
Esempio n. 5
0
        static void Main()
        {
            Alpha objA = new Alpha(4);
            Beta  objB = new Beta(9);

            // Продемонстрировать сначала контравариантность.
            // Объявить делегат SomeOp<Alpha> и задать для него метод IsEven.
            SomeOp <Alpha> checkIt = IsEven;
            // Объявить делегат SomeOp<Beta>.
            SomeOp <Beta> checkIt2;

            // А теперь- присвоить делегат SomeOp<Alpha> делегату SomeOp<Beta>.
            // *** Это допустимо только благодаря контравариантности. ***
            checkIt2 = checkIt;

            // Вызвать метод через делегат.
            Console.WriteLine(checkIt2(objB));

            // Далее, продемонстрировать ковариантность.

            // Объявить сначала два делегата типа AnotherOp.
            // Здесь возвращаемым типом является класс Beta,
            // а параметром типа - класс Alpha.
            // Обратите внимание на то, что для делегата modifyIt
            // задается метод ChangeIt.
            AnotherOp <Beta, Alpha> modifyIt = ChangeIt;

            // Здесь возвращаемым типом является класс Alpha,
            // а параметром типа — тот же класс Alpha.
            AnotherOp <Alpha, Alpha> modifyIt2 = ChangeIt;

            // А теперь присвоить делегат modifyIt делегату modifyIt2.
            // *** Это допустимо только благодаря ковариантности. ***
            modifyIt2 = modifyIt;

            // Вызвать метод и вывести результаты на экран.
            objA = modifyIt2(objA);
            Console.WriteLine(objA.Val);
        }
Esempio n. 6
0
    static void Main()
    {
        Alpha objA = new Alpha(4);
        Beta  objB = new Beta(9);

        // First demonstrate contravariance.
        // Declare a SomeOp<Alpha> delegate and set it to IsEven.
        SomeOp <Alpha> checkIt = IsEven;

        // Declare a SomeOp<Beta> delegate.
        SomeOp <Beta> checkIt2;

        // Now, assign the SomeOp<Alpha> delegate the SomeOp<Beta> delegate.
        // *** This is legal only because of contravariance. ***
        checkIt2 = checkIt;


        // Call through the delegate.
        Console.WriteLine(checkIt2(objB));

        // Now, demonstrate covariance.
        // First, declare two AnotherOp delegates.
        // Here, the return type is Beta and the parameter type is Alpha.
        // Notice that modifyIt is set to ChangeIt.
        AnotherOp <Beta, Alpha> modifyIt = ChangeIt;

        // Here, the return type is Alpha and the parameter type is Alpha.
        AnotherOp <Alpha, Alpha> modifyIt2;

        // Now, assign modifyIt to modifyIt2.
        // *** This statement is legal only because of covariance. ***
        modifyIt2 = modifyIt;

        // Actually call the method and display the results.
        objA = modifyIt2(objA);
        Console.WriteLine(objA.Val);
    }