Advertisement
fcamuso

Interfacce - parte B

Dec 30th, 2020
538
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.29 KB | None | 0 0
  1. using System;
  2.  
  3. namespace interfacce_1
  4. {
  5.  
  6.   class Program
  7.   {
  8.     static void Main(string[] args)
  9.     {
  10.       Allarme obj = new Allarme(new GestoreMessaggistica());
  11.       Allarme objPEC = new Allarme(new PEC());
  12.  
  13.       //obj.Notifica();
  14.       //objPEC.Notifica();
  15.  
  16.       PEC unaPec = new PEC();
  17.       ((IPrintable) unaPec).Descrivi();
  18.       ((IEmail)unaPec).Descrivi();
  19.  
  20.       ((IPrintable)unaPec).Setup();
  21.       ((IEmail)unaPec).Setup();
  22.  
  23.      
  24.       //solo se pubblici nell`interface
  25.       //Console.WriteLine($"{IPrintable.LoadOEMData()} - {IPrintable.versioneDriver}");
  26.     }
  27.   }
  28.  
  29.   interface IPrintable {
  30.  
  31.     private static string versioneDriver = "1.07";
  32.     private static string LoadOEMData() { return "Dati OEM"; }
  33.  
  34.     bool Setup();
  35.  
  36.     void Print();
  37.     void Descrivi() => Console.WriteLine($"{versioneDriver} da IPrintable; {LoadOEMData()}");
  38.   }
  39.  
  40.   interface IPrintable3D : IPrintable
  41.   {
  42.     void Print3D();
  43.   }
  44.  
  45.   interface IEmail
  46.   {
  47.     bool Setup();
  48.  
  49.     void InviaEmail(string indirizzoMail, string oggetto, string testoMail);
  50.     void Descrivi() => Console.WriteLine("Descrizione dettagliata non disponibile");
  51.   }
  52.  
  53.   class GestoreMessaggistica : IEmail
  54.   {
  55.     public void InviaEmail(string indirizzoMail, string oggetto, string testoMail)
  56.     { Console.WriteLine("Email inviata"); }
  57.  
  58.     public void Descrivi() => Console.WriteLine("Protocolli supportati: bla bla bla");
  59.     public bool Setup() { Console.WriteLine("Setup Gestore Messaggistica"); return true; }
  60.  
  61.   }
  62.  
  63.   class PEC : IEmail, IPrintable
  64.   {
  65.     bool IEmail.Setup() { Console.WriteLine("Setup PEC - IEmail"); return true; }
  66.     bool IPrintable.Setup() { Console.WriteLine("Setup PEC - IPrintable"); return true; }
  67.  
  68.     public virtual void InviaEmail(string indirizzoMail, string oggetto, string testoMail)
  69.     { Console.WriteLine("Email PEC inviata"); }
  70.  
  71.     public void Print() { }
  72.   }
  73.  
  74.   class PECLevel2 : PEC
  75.   {
  76.     public override void InviaEmail(string indirizzoMail, string oggetto, string testoMail)
  77.     { Console.WriteLine("Email PEC inviata"); }
  78.  
  79.     public new void Print() { Console.WriteLine("Metodo reimplementato"); }
  80.   }
  81.  
  82.   class Allarme
  83.   {
  84.     IEmail gestoreEmail = null;
  85.  
  86.     public Allarme(IEmail gestore) {
  87.       gestoreEmail = gestore;
  88.     }
  89.  
  90.     public void Notifica()
  91.     {
  92.       gestoreEmail.Setup();
  93.  
  94.       //gestoreEmail.InviaEmail("fcamuso@gmail.com", "test", "questo è un test");
  95.       //gestoreEmail.Descrivi();
  96.  
  97.     }
  98.   }    
  99.  
  100.   //COMPOSIZIONE SENZA INTERFACCE: meno problemi ma si può ancora migliorare!
  101.   //class GestoreMessaggistica
  102.   //{
  103.   //  public void InviaEmail(string indirizzoMail, string oggetto, string testoMail) { }
  104.   //}
  105.  
  106.   //class Allarme
  107.   //{
  108.   //  GestoreMessaggistica gestoreMessaggistica = new GestoreMessaggistica();
  109.  
  110.   //  void Notifica()
  111.   //  {
  112.   //    //...
  113.   //    gestoreMessaggistica.InviaEmail("fcamuso@gmail.com", "test", "questo è un test");
  114.   //  }
  115.   //}
  116.   // ************************************************************************************
  117.  
  118.  
  119.   //NO! Cattivo esempio di ereditarietà
  120.   //class Allarme : GestoreMessaggistica
  121.   //{
  122.   //  //public void InviaEmail(string indirizzoMail, string oggetto, string testoMail) { }
  123.  
  124.  
  125.   //}
  126.  
  127.  
  128.   abstract class Conto
  129.   {
  130.     public long NumeroConto { get; set; } = 0;
  131.     abstract public double InteresseAnnuo { get; set; }
  132.     abstract public void Preleva(decimal value);
  133.   }
  134.  
  135.   class ContoCorrente : Conto
  136.   {
  137.     private double interesseAnnuo = 0;
  138.     public override double InteresseAnnuo {
  139.       get => interesseAnnuo;
  140.       set {
  141.         //logica che lo determina in base al tipo di cliente,
  142.         //operatività prevista sul conto e altre variabili
  143.       } }
  144.  
  145.     public override void Preleva(decimal value)
  146.     {
  147.       Console.WriteLine("Prelievo da un conto corrente");
  148.     }
  149.   }
  150.  
  151.   class ContoDeposito : Conto
  152.   {
  153.     private double interesseAnnuo = 0;
  154.     public override double InteresseAnnuo
  155.     {
  156.       get => interesseAnnuo;
  157.       set
  158.       {
  159.         //logica che lo determina in base al tipo di cliente,
  160.         //operatività prevista sul conto e altre variabili
  161.       }
  162.     }
  163.  
  164.     public override void Preleva(decimal value)
  165.     {
  166.       Console.WriteLine("Prelievo da un conto deposito");
  167.     }
  168.   }
  169.  
  170. }
  171.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement