Пример #1
0
        static void Main(string[] args)
        {
            // Instantiate the delegate.
            DelWriteName dwn = WriteMyName;

            Console.WriteLine("Enter your name");
            // Call the delegate.
            dwn(Console.ReadLine());

            // Instantiate the delegate.
            Del handler = DelegateMethod;

            // Call the delegate.
            handler("Hello World");
            MethodWithCallback(1, 2, handler);

            MethodClass obj = new MethodClass();
            Del         d1  = obj.Method1;
            Del         d2  = obj.Method2;
            Del         d3  = DelegateMethod;

            //Both types of assignment are valid.
            Del allMethodsDelegate = d1 + d2;

            allMethodsDelegate += d3;

            //remove Method1
            allMethodsDelegate -= d1;

            // copy AllMethodsDelegate while removing d2
            Del oneMethodDelegate = allMethodsDelegate - d2;

            int invocationCount = d1.GetInvocationList().GetLength(0);



            Transformer t      = Square; // create delegate instance
            int         result = t(3);   //invoke delegate

            Console.WriteLine(result);   // 9



            delLeapYear ly = LeapYear;

            Console.WriteLine(ly(2008));  // true;



            Console.ReadLine();
        }
Пример #2
0
        static void Main(string[] args)
        {
            #region 1 - Delegar noutro método

            //cria instâncias dos delegates
            NumberChanger nc1 = new NumberChanger(Delegates.AddNum);
            //ou
            //nc1 = Delegates.AddNum;
            NumberChanger nc2 = new NumberChanger(Delegates.MultNum);

            //chama os métodos usando os delegates
            nc1(25);
            Console.WriteLine("Numero: {0}", Delegates.Num);
            nc2(5);
            Console.WriteLine("Numero: {0}", Delegates.Num);
            Console.ReadKey();

            #endregion

            #region 2 - Delegar noutro método
            Pessoa p = new Pessoa("Ola", new DateTime(2000, 12, 24));

            //cria instâncias de delegates
            MyDelegate1 nc3 = new MyDelegate1(p.GetIdade);
            MyDelegate2 nc4 = new MyDelegate2(Console.WriteLine);
            //o mesmo que
            //nc4 = Console.WriteLine;

            //chama metodos usando delegates
            int idade = nc3();
            Console.WriteLine("Idade: {0}", idade);

            idade = p.GetIdade();
            nc4("Nascimento: " + p.Nasci.ToString());
            Console.ReadKey();
            #endregion

            #region 3 - Delegates como parâmetros

            PrintString ps1 = new PrintString(Print.WriteToScreen);
            PrintString ps2 = new PrintString(Print.WriteToFile);

            Print.SendString(ps1);
            Print.SendString(ps2);

            Console.ReadKey();

            #endregion

            #region 4 - Delegates como parâmetros
            //cria delegate com callback associado
            Exec d1 = new Exec(Delegates.AddNumNum);

            //invoca metodo com callback no parametro
            int aux = Delegates.ExecSomething(12, 13, d1);

            //invoca delegate
            Print.SendString(ps1, "Resultado: " + aux.ToString());

            Console.ReadKey();
            #endregion

            #region 5 - Mulcasting Delegates

            MethodClass obj = new MethodClass();
            MyDelegate2 nc5 = new MyDelegate2(Console.WriteLine);
            MyDelegate2 m1  = obj.Method1;
            MyDelegate2 m2  = obj.Method2;
            nc5 = Console.WriteLine;

            //ou
            MyDelegate2 allMethodsDelegate = m1 + m2;
            allMethodsDelegate += nc5;

            allMethodsDelegate("-Teste-");
            //ao invocar allMethodsDelegate serão executados Method1, Method2 e WriteLine
            Console.ReadKey();
            #endregion

            #region 6 - Outros Delegates

            MethodClass.Method3(new int[] { 3, 4, 5, 6 }, Console.WriteLine);
            Console.ReadKey();

            MethodClass.Method3(new int[] { 3, 4, 5, 6 }, MethodClass.ShowOdd);
            Console.ReadKey();
            #endregion

            #region 7 - Anonymous Methods

            MyPrint print = delegate(int val) {
                Console.WriteLine("Inside Anonymous method. Value: {0}", val);
            };

            print(100);

            #endregion

            #region 8 - Eventos

            FileLogger fl      = new FileLogger(@"c:\temp\Process.log");
            MyClass    myClass = new MyClass();

            // Subscribe the Functions Logger and fl.Logger
            myClass.Log += new MyClass.LogHandler(MyClass.Logger);  //Event Handlers
            myClass.Log += new MyClass.LogHandler(fl.Logger);

            // The Event will now be triggered in the Process() Method
            myClass.Process();

            fl.Close();
            #endregion

            #region 10 - Events Handler

            Counter c = new Counter(new Random().Next(10));
            c.ThresholdReached += c_ThresholdReached;

            Console.WriteLine("press 'a' key to increase total");
            while (Console.ReadKey(true).KeyChar == 'a')
            {
                Console.WriteLine("adding one");
                c.Add(1);
            }
            #endregion

            #region 9 - Eventos
            // Create a new clock
            Clock theClock = new Clock();

            // Create the display and tell it to subscribe to the clock just created
            DisplayClock dc = new DisplayClock();
            dc.Subscribe(theClock);

            // Create a Log object and tell it to subscribe to the clock
            LogClock lc = new LogClock();
            lc.Subscribe(theClock);

            // Get the clock started
            theClock.Run();
            #endregion
        }