Gå til indholdet

N284B Delegates (log / Action)

Du skal skabe en tom konsol app med en klasse maskine med følgende medlemmer:

  • En indbygget delegate (Action), der kan bruges på void metoder der har en string som argument
  • En start metode der kalder Log med Tid + ” Starter” (eksempelvis ”16:13:25 Starter”)
  • En stop metode der kalder Log med Tid + ” Stopper” (eksempelvis ”16:13:25 Stopper”)

I Program-klassen skal du skabe en statisk metode der appender tekst til en tekstfil som følger:

static void AppendLog(string txt) {
    // Kræver at c:\temp findes i forvejen!
    System.IO.File.AppendAllText(@"c:\temp\log.txt", txt + "\r\n");
}

Dan nu I Main() et objekt af Maskine, bind både Console.WriteLine og AppendLog til delegate’n Log, og kald Start() og Stop().

Maskine m = new Maskine();
m.Log = Console.WriteLine;
m.Log += AppendLog;
m.Start();
m.Stop();
Der burde nu skrives både til console og til tekstfilen.
Klik for at se et forslag til en løsning
Maskine m = new Maskine();
Action<string> a1 = Console.WriteLine;
m.Log = a1;
// eller blot 
// m.Log = Console.WriteLine;

m.Log += AppendLog;
m.Start();
m.Stop();

void AppendLog(string txt)
{
    System.IO.File.AppendAllText(@"c:\temp\log.txt", txt + "\r\n");
}

class Maskine
{

    public Action<string> Log { get; set; }

    public void Start()
    {
        Log?.Invoke(DateTime.Now.ToLongTimeString() + " Starter");
    }
    public void Stop()
    {
        Log?.Invoke(DateTime.Now.ToLongTimeString() + " Stopper");
    }
}