示例#1
0
文件: Call.cs 项目: modernstar/core
        private void SafeRaiseEvent(EmptyDelegate del)
        {
            if (del == null)
            {
                return;
            }

            var invocationList = del.GetInvocationList();

            foreach (var current in invocationList)
            {
                ((EmptyDelegate)current).BeginInvoke(_emptyDelegateAsyncCallback, current);
            }
        }
示例#2
0
        static void Main(string[] args)
        {
            Converter          converter = new Converter();
            Int2StringDelegate del       = new Int2StringDelegate(converter.ConvertToString);

            //variabile di tipo implicito
            var del2 = new Int2StringDelegate(converter.ConvertToString);

            //creazione implicita delegate
            Int2StringDelegate isdel = converter.ConvertToString;

            Int2StringDelegate del3 = (Int2StringDelegate)Delegate.CreateDelegate(typeof(Int2StringDelegate), converter, "ConvertToString");

            del3(123);

            string str = isdel(123);

            str = isdel.Invoke(123);

            //ottenere informazioni
            Console.WriteLine("ottenere informazioni sul delegate");
            var method = isdel.Method;

            Console.WriteLine(method.Name);
            var target = isdel.Target;

            Console.WriteLine(target.ToString());

            Console.WriteLine("ottenere informazioni sul delegate con metodo statico");
            isdel = Converter.StaticConvertToString;
            Console.WriteLine(isdel.Method);
            Console.WriteLine(isdel.Target);

            UseDelegate(Converter.StaticConvertToString, 1, 2, 3);

            EmptyDelegate multicast = Metodo1;

            multicast += Metodo2;
            multicast += Metodo2; //un metodo può essere aggiunto più volte
            multicast();
            multicast -= Metodo2;
            Delegate[] list = multicast.GetInvocationList();
            foreach (Delegate delInstance in list)
            {
                Console.WriteLine("invoco {0}", delInstance.Method);
                (delInstance as EmptyDelegate).Invoke();
                //delInstance.DynamicInvoke();
            }

            multicast = (EmptyDelegate)Delegate.Combine(new EmptyDelegate(Metodo1), new EmptyDelegate(Metodo2));

            multicast -= Metodo1;
            multicast -= Metodo2;
            if (multicast != null)
            {
                multicast.Invoke();
            }

            Int2StringDelegate multi = converter.ConvertToString;

            multi += converter.RaddoppiaNumero;
            Console.WriteLine(multi(10));

            int         x        = 1;
            RefDelegate multiref = Raddoppia;

            multiref += Triplica;
            multiref(ref x);
            Console.WriteLine(x);

            ConvertOriginToDest <int, string> siconvert = converter.StringToInt;
            int i = siconvert("123");

            ConvertOriginToDest <string, int> isconvert = converter.Int2String;
            string s = isconvert(123);

            Func <int, int> func = Fattoriale;

            int n = EvaluateFunction <int>(func, 10);
            Func <double, double> funcRadice = Math.Sqrt;
            double radice = EvaluateFunction <double>(funcRadice, 144);
            double log    = EvaluateFunction(Math.Log10, 100.0);

            //stampo l'errore
            OperazionePericolosa(PrintError);


            //covarianza func
            Func <string> funcHello = Hello;
            Func <object> funcObj   = funcHello;
            object        obj       = funcObj();

            //controvarianza Action
            Action <object> actObj = UseObject;
            Action <string> actStr = actObj;

            actStr("Hello");
        }