Пример #1
0
        static void Main(string[] args)
        {
            // System.Delegate delegate

            // 呼叫端 - 靜態方法

            NumberChange nc1 = new NumberChange(AddNum);

            nc1(25);
            Console.WriteLine("Value of num : {0}", num); // 輸出:35

            // 呼叫端 - 外部方法

            MyClass mc = new MyClass();

            NumberChange nc2 = new NumberChange(mc.AddNum);

            nc2(35);
            Console.WriteLine("Value of num : {0}", mc.num); // 輸出:45

            // 呼叫端 - 同一個委派,使用不同的方法,多型

            NumberChange nc3 = new NumberChange(mc.MutliNum);

            nc3(2);
            Console.WriteLine("Value of num : {0}", mc.num); // 輸出:90
        }
Пример #2
0
        static void Main(string[] args)
        {
            NumberChange <int> nc1 = new NumberChange <int>(AddNum);
            NumberChange <int> nc2 = new NumberChange <int>(MultiNum);

            nc1(25);
            Console.WriteLine(num);
            nc2(5);
            Console.WriteLine(num);

            Console.ReadLine();
        }
Пример #3
0
        static void Main(string[] args)
        {
            NumberChange nc1 = new NumberChange(Add);

            nc1(13);
            Console.WriteLine("Value of number: {0}", number);

            NumberChange nc2 = new NumberChange(Multi);

            nc2(10);
            Console.WriteLine("Value of number: {0}", number);
            Console.ReadKey();
        }
Пример #4
0
        static void Main9(string[] args)
        {
            //创建委托实例
            NumberChange <int> nc1 = new NumberChange <int>(AddNum);
            NumberChange <int> nc2 = new NumberChange <int>(MultNum);

            //使用委托对象调用方法
            int temp = nc1(24);

            Console.WriteLine("value of num: {0}--{1}", getNum(), temp);
            nc2(5);
            Console.WriteLine("value of num: {0}", getNum());
        }
Пример #5
0
        static void Main(string[] args)
        {
            NumberChange NC1 = new NumberChange(AddNum);
            NumberChange NC2 = new NumberChange(MultNum);

            NC1(25);
            Console.WriteLine("Value of Num : {0} ", GetNum());
            NC2(5);
            Console.WriteLine("Value of Num : {0} ", GetNum());
            p += Fun1;
            p += Fun2;
            p.Invoke();
            Console.Read();
        }
Пример #6
0
        public void Run()
        {
            try
            {
                if (flag)
                {
                    Console.WriteLine("--------------Delegate--------------");
                    // 创建委托实例
                    NumberChange nc1 = new NumberChange(AddNum);
                    NumberChange nc2 = new NumberChange(MultNum);
                    Console.WriteLine(GetNum());
                    // 使用委托对象调用方法
                    nc1(10);    // num(3) + 10 = 13     num(10) + 10 = 20
                    Console.WriteLine(GetNum());
                    nc2(5);     // num(13) * 5 = 65     num(20) * 5 = 100
                    Console.WriteLine(GetNum());

                    Console.WriteLine("--------------Delegate Multicasting--------------");
                    NumberChange nc;
                    // 委托的多播, "+" 运算符进行合并,"-" 运算符可用于从合并的委托中移除组件委托
                    nc  = nc1;
                    nc += nc2;
                    // 调用多播
                    nc(5);  // num(65) + 5 = 70 , num(70) * 5 = 350  num(100) + 5 = 105 , num(105) * 5 = 525
                    Console.WriteLine(GetNum());

                    Console.WriteLine("--------------Delegate Usage--------------");
                    PrintInfo pt  = new PrintInfo(Print);
                    PrintInfo pt2 = new PrintInfo(Print02);
                    SendInfo(pt);   // Print(): SendInfo()
                    SendInfo(pt2);  // Print02(): SendInfo()

                    Console.WriteLine("--------------Delegate Case--------------");
                    delegatetest dt;
                    // 委托被附上了具体的方法
                    dt = Multiply;
                    Console.WriteLine($"2 * 3 = {dt(2, 3)}");
                    dt = Sum;
                    Console.WriteLine($"2 + 3 = {dt(2, 3)}");

                    Console.ReadKey();
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
Пример #7
0
        static void Main(string[] args)
        {
            NumberChange nc1 = new NumberChange(AddNum);

            nc1(12); //Aufruf der Methode int AddNum(int p)


            Console.WriteLine("2ter Call mit 2 angehängten Methoden");
            nc1 += MultNum; // Füge zusätzlich eine weitere Methode hinzu
            nc1(25);


            nc1 -= AddNum; //Lösche AddNum Methode aus Methoden-Liste
            nc1(13);       // Ruft nur MultNum auf
            Console.ReadKey();
        }
Пример #8
0
        static void Main(string[] args)
        {
            // Definicja delegata - dla porównania
            NumberChangeNormalDef normal = new NumberChangeNormalDef(Test.AddNumber);
            // Deklaracja instancji generycznych delegatów
            NumberChange <int> d1 = new NumberChange <int>(Test.AddNumber);
            NumberChange <int> d2 = new NumberChange <int>(Test.MultiplyNumber);

            // Wywołanie metod używając obiektu delegata
            d1(5);
            Console.WriteLine("Liczba: {0}", Test.GetNumber());
            d2(10);
            Console.WriteLine("Liczba: {0}", Test.GetNumber());
            Console.ReadKey();
            // Wynik działania programu
            // Liczba: 15
            // Liczba: 150
        }
Пример #9
0
        public static void Main(string[] args)
        {
            NumberChange n = new NumberChange(changeInt);

            n(9);

            NumberChange n2 = delegate(int b) {
                Console.WriteLine(b--);
            };

            n2(9);

            NumberChange n3 = delegate(int x){
                Console.WriteLine(x * x);
            };

            n3(99);
        }
Пример #10
0
        static void Main3(string[] args)
        {
            //创建委托实例
            NumberChange numChange1 = new NumberChange(AddNum);
            NumberChange numChange2 = new NumberChange(MultNum);

            //使用委托对象调用方法
            numChange1(20);
            Console.WriteLine(getNum());
            numChange2(11);
            Console.WriteLine(getNum());

            NumberChange numberChange;

            numberChange  = numChange1;
            numberChange += numChange2;
            //调用多播
            numberChange(10);
            Console.WriteLine(getNum());
        }
Пример #11
0
        static void Main(string[] args)
        {
            NumberChange nc1 = new NumberChange(AddNum);
            NumberChange nc2 = new NumberChange(MultiNum);
            Console.WriteLine(GetNum());
            nc1(25);
            Console.WriteLine(GetNum());
            var nc = nc2+nc1;
            nc(2);
            Console.WriteLine(GetNum());
            nc(2);
            Console.WriteLine(GetNum());
            nc = nc - nc1;
            nc(2);
            Console.WriteLine(GetNum());
            //nc1 += nc2;
            nc(2);
            Console.WriteLine(GetNum());
            Console.ReadLine();

        }
Пример #12
0
        static void Main10(string[] args)
        {
            //使用匿名方法创建委托实例
            NumberChange nc = delegate(int x){
                Console.WriteLine("anonymous method : {0}", x);
                return(0);
            };

            //使用匿名方法调用委托
            nc(10);

            //使用命名方法实例化委托
            NumberChange <int> tempNc = new NumberChange <int>(AddNum);

            tempNc(5);

            //使用另一个命名方法实例化委托
            tempNc = new NumberChange <int>(MultNum);

            //调用委托
            tempNc(2);
        }
Пример #13
0
        static void Main(string[] args)
        {
            NumberChange <int> nc1 = new NumberChange <int>(AddNum);

            NumberChange <string> nc2 = new NumberChange <string>(MultString);

            nc1(25);
            Console.WriteLine(num);

            nc2(" World");
            Console.WriteLine(s1);

            // int

            MyGenericArray <int> intArray = new MyGenericArray <int>(5);

            for (int i = 0; i < 5; i++)
            {
                intArray.SetItem(i, i * 5);
            }

            for (int i = 0; i < 5; i++)
            {
                Console.Write(intArray.GetItem(i) + " ");
            }

            Console.WriteLine();

            intArray.GenericMethod <string>("Hello Generic!");
            intArray.GenericMethod <int>(100);

            // char

            MyGenericArray <char> charArray = new MyGenericArray <char>(5);

            for (int i = 0; i < 5; i++)
            {
                charArray.SetItem(i, (char)(i + 97));
            }

            for (int i = 0; i < 5; i++)
            {
                Console.Write(charArray.GetItem(i) + " ");
            }

            Console.WriteLine();

            int  a, b;
            char c, d;

            a = 10;
            b = 20;
            c = 'I';
            d = 'V';

            Console.WriteLine("a = {0}; b = {1}", a, b);
            Console.WriteLine("c = {0}; d = {1}", c, d);

            Swap <int>(ref a, ref b);
            Swap <char>(ref c, ref d);

            Console.WriteLine("a = {0}; b = {1}", a, b);
            Console.WriteLine("c = {0}; d = {1}", c, d);
        }
Пример #14
0
        /// <summary>
        /// 泛型
        /// 实际:微软的一种延迟机制;Lazy;
        /// 定义:允许类延迟编写类或方法中的编程元素的数据类型的规范
        /// 作用:一个可以和任何数据类型工作的类或方法
        /// 自定义:泛型接口、泛型类、泛型方法、泛型事件、泛型委托
        /// 泛型类型获取:类型信息可以在运行时使用反射获取
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            //声明一个整型数组
            MyGenericArray <int> intArray = new MyGenericArray <int>(5);

            for (int i = 0; i < 5; i++)
            {
                intArray.SetItem(i, i + 1);
            }
            for (int i = 0; i < 5; i++)
            {
                Console.Write(intArray.GetItem(i) + " ");
            }

            //声明一个字符串数组
            MyGenericArray <string> stringArray = new MyGenericArray <string>(5);

            for (int i = 0; i < 5; i++)
            {
                stringArray.SetItem(i, "aaa" + i);
            }

            for (int i = 0; i < 5; i++)
            {
                Console.Write(stringArray.GetItem(i) + " ");
            }

            Console.WriteLine();


            //Example 泛型方法
            int  a, b;
            char c, d;

            a = 10;
            b = 20;
            c = 'I';
            d = 'v';

            Console.WriteLine("Int values before calling swap:");
            Console.WriteLine("a = {0}, b = {1}", a, b);
            Console.WriteLine("Char values before calling swap:");
            Console.WriteLine("c = {0}, d = {1}", c, d);

            GenerFun.Swap <int>(ref a, ref b);
            GenerFun.Swap <char>(ref c, ref d);

            Console.WriteLine("Int values after calling swap:");
            Console.WriteLine("a = {0}, b = {1}", a, b);
            Console.WriteLine("Char values after calling swap:");
            Console.WriteLine("c = {0}, d = {1}", c, d);

            //Example 泛型委托
            NumberChange <int> nm1 = new NumberChange <int>(GenerDelegate.AddNum);
            NumberChange <int> nm2 = new NumberChange <int>(GenerDelegate.MulNum);

            nm1(10);
            Console.WriteLine(GenerDelegate.GetNum());

            nm2(10);
            Console.WriteLine(GenerDelegate.GetNum());


            Console.Read();
        }