示例#1
0
            public void GenerateDouble(ILGenerator generator, FunctionSet set, FunctionParams pars)
            {
                double val;

                if (HasConstantValue(set, pars, out val))
                {
                    generator.Emit(OpCodes.Ldc_R8, val);
                    return;
                }

                // We must make sure all params are in double form!
                src1.GenerateDouble(generator, set, pars);
                src2.GenerateDouble(generator, set, pars);

                // We generate the call on those two params.
                PowDelegate pow = global::System.Math.Pow;

                generator.EmitCall(OpCodes.Call, pow.Method, null);
            }
示例#2
0
        // Main

        static void Main(string[] args)
        {
            // 1

            var program = new Program();
            var printer = new Printer();

            BaseDelegate  aa = Gav;
            BaseDelegate2 bb = Gav2;

            // 2

            DelegateForStatic delegateForStatic = StaticMethod;

            delegateForStatic("Static method works");


            // 3

            Console.WriteLine();
            BaseDelegate2 printerDelegate = printer.Print;

            printerDelegate.Invoke(new B());

            // 4
            var del = new Action <string>(str => Console.Write(str));

            del("adsfdsfdsdfsdf");
            del?.Invoke("adsfdsfdsdfsdf");
            // 5

            Console.WriteLine();
            DelegateForChains d1 = ChainMethod2;
            DelegateForChains d2 = ChainMethod1;
            DelegateForChains d3 = ChainMethod1;

            d3 += d1;
            d3 += d2;
            d3 += d2;
            d3 -= d2;
            d3();

            // 6

            var dels = d3.GetInvocationList();

            Console.WriteLine();
            foreach (var d in dels)
            {
                if (nameof(ChainMethod1) == d.Method.Name)
                {
                    d.DynamicInvoke();
                }
            }

            // 7

            Console.WriteLine();

            Func <double, double, double> genDel = (a, b) => Math.Pow(a, b);

            Console.WriteLine(genDel(2, 3));

            PowDelegate powDel = (a, b) => Math.Pow(a, b);

            Console.WriteLine(powDel(3, 2));

            // 9

            Console.WriteLine();
            MyEvent += EventMethod;
            MyEvent();
        }