using System.Collections.Generic;
public static void Main()
Maestra pina= new Maestra()
Alunno mario = new Alunno(pina);
Alunno carola = new Alunno(pina)
Alunno gianmarco = new Alunno(pina)
Console.WriteLine("Lunedì - Appello");
Console.WriteLine("\n\nMartedì - Appello");
gianmarco.TornaAScuola();
Console.WriteLine("\n\nMercoledì - Appello");
public abstract class Persona
public string Nome {get; set;}
public string Cognome {get;set;}
public class GeneralitaEventArgs : EventArgs
public string Nome {get;set;}
public string Cognome {get;set;}
public class Maestra : Persona
public List<Alunno> Alunni {get;set;}
public event EventHandler<GeneralitaEventArgs> AppelloAlunnoEvent;
Alunni = new List<Alunno>();
foreach(var alunno in Alunni)
GeneralitaEventArgs nomeCognomeAlunno = new GeneralitaEventArgs()
OnAppelloAlunnoEvent(nomeCognomeAlunno);
private void OnAppelloAlunnoEvent (GeneralitaEventArgs nomeCognomeAlunno)
if(AppelloAlunnoEvent != null)
Console.WriteLine("\n" + nomeCognomeAlunno.Nome + " " + nomeCognomeAlunno.Cognome);
AppelloAlunnoEvent(this, nomeCognomeAlunno);
public class Alunno : Persona
private Maestra _maestra;
public Alunno(Maestra maestra)
_maestra.Alunni.Add(this);
_maestra.AppelloAlunnoEvent += RispondiAllAppello;
public void RispondiAllAppello(object sender, GeneralitaEventArgs nomeCognome)
if(nomeCognome.Nome.Equals(this.Nome) && nomeCognome.Cognome.Equals(this.Cognome))
Console.WriteLine("\t" + this.Nome + " presente!");
public void TornaAScuola()
_maestra.AppelloAlunnoEvent += RispondiAllAppello;
_maestra.AppelloAlunnoEvent -= RispondiAllAppello;