Advertisement
fcamuso

Delegate - B

Mar 20th, 2021
575
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.50 KB | None | 0 0
  1. using System;
  2.  
  3. namespace delegate_1
  4. {
  5.  
  6.   //delegate void LogDelegate(string dati);
  7.   class Cliente {
  8.     public int matricola { get; set; }  = 2345;
  9.     public void MetodoCliente(string s) { Console.WriteLine($"Metodo di un cliente: {s}"); }
  10.   }
  11.  
  12.   class Transazione
  13.   {
  14.     Action<String> metodoLog = null;
  15.  
  16.  
  17.     public Transazione(Action<String> metodo)
  18.     { metodoLog = metodo; }
  19.  
  20.     public void RichiedeControllo()
  21.     {
  22.       Controllo();
  23.     }
  24.    
  25.     public double Contabilizza(double acconto,
  26.                                Func<double, double> sconto,
  27.                                Predicate<Cliente> HaDirittoSconto)
  28.     { return HaDirittoSconto(new Cliente() ) ? acconto - sconto(acconto) : acconto; }
  29.  
  30.  
  31.     void Controllo()
  32.     {
  33.       bool condizione = true;
  34.       // ... controlli
  35.  
  36.       if (condizione)
  37.         metodoLog("dati");
  38.  
  39.       Console.WriteLine(((Cliente)metodoLog.Target).matricola);
  40.     }
  41.  
  42.    }
  43.  
  44.  
  45.  
  46.   //I DELEGATE SONO MULTICAST
  47.   public delegate int GestoreAllarmi();
  48.  
  49.   class SecuritySystem
  50.   {
  51.     private GestoreAllarmi Allerta = null;
  52.  
  53.     public SecuritySystem(GestoreAllarmi g)
  54.     {
  55.       Allerta = g;
  56.     }
  57.  
  58.     public void SetAllarmeSupplementare(GestoreAllarmi allarmeSupplementare)
  59.     {
  60.       Allerta += allarmeSupplementare; //LISTA DI RIFERIMENTI A METODI!
  61.     }
  62.  
  63.     public void Allarme()
  64.     {
  65.       Console.WriteLine(Allerta());
  66.     }
  67.   }
  68.  
  69.   public delegate void ClickHandler();
  70.  
  71.   class MyButton
  72.   {
  73.     public event ClickHandler Click;
  74.  
  75.     public void Clicca() //simula il click sul bottone
  76.     {
  77.       //invoca tutti i metodi degli oggetti che sono interessati
  78.       //a fare qualche cosa quando questo bottone viene cliccato
  79.       Click();
  80.     }
  81.   }
  82.  
  83.   class Form1
  84.   {
  85.     public void MetodoForm1()
  86.     { Console.WriteLine("oggetto di classe Form1 ha ricevuto la notifica!"); }
  87.   }
  88.  
  89.   class Form2
  90.   {
  91.     public void MetodoForm2()
  92.     { Console.WriteLine("oggetto di classe Form2 ha ricevuto la notifica!"); }
  93.   }
  94.  
  95.   class Program
  96.   {
  97.     static void UnTipoDiLog(string dati)
  98.     { Console.WriteLine(dati);}
  99.      
  100.     static void UnAltroTipoDiLog(string dati)
  101.     { Console.WriteLine($"----- {dati} ----------"); }
  102.  
  103.     static double ScontoStandard(double cifra)
  104.     { return cifra / 100 * 5; }
  105.  
  106.     static bool ValutaClientePerSconto(Cliente ilCliente)
  107.     { return true; }
  108.    
  109.     static int  AllertaAdmin() { Console.WriteLine("Admin avvisato!"); return 100; }
  110.     static int  AllertaAutorita() { Console.WriteLine("Autorità competenti avvisate!"); return 200;}
  111.  
  112.     static void Main(string[] args)
  113.     {
  114.  
  115.       Transazione tipo1 = new Transazione(UnTipoDiLog);
  116.       Transazione tipo2 = new Transazione(UnAltroTipoDiLog);
  117.       Transazione tipo3 = new Transazione( (new Cliente()).MetodoCliente);
  118.  
  119.       //tipo1.RichiedeControllo();
  120.       //tipo2.RichiedeControllo();
  121.       //Console.WriteLine(tipo2.Contabilizza(230.5, ScontoStandard, ValutaClientePerSconto));
  122.  
  123.       //tipo3.RichiedeControllo();
  124.  
  125.       //SecuritySystem sec = new SecuritySystem(AllertaAdmin);    
  126.       //sec.SetAllarmeSupplementare(AllertaAutorita);
  127.  
  128.       //sec.Allarme();
  129.  
  130.       MyButton button = new MyButton();
  131.  
  132.       Form1 form1 = new Form1();
  133.       Form2 form2 = new Form2();
  134.  
  135.       //iscriviamo i due oggetti per ricevere notifiche dal bottone
  136.       button.Click += form1.MetodoForm1;
  137.       button.Click += form2.MetodoForm2;
  138.  
  139.       //clicchiamo il bottone
  140.       button.Clicca();
  141.  
  142.  
  143.  
  144.     }
  145.   }
  146. }
  147.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement