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
using System;

namespace Demo
{
    class Program
    {
        static void Main(string[] args)
        {
            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();

        }

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

    public 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");
        }
    }
}