Gå til indholdet

N284C Delegates (log / lambda)

Du skal skabe en tom konsol app med en klasse Maskine, der benytter lambda-udtryk for at logge beskeder.

Klasse Maskine skal indeholde:

  • En Action<string> delegate til at logge beskeder.
  • En Start-metode der logger tidspunktet med beskeden “Starter”.
  • En Stop-metode der logger tidspunktet med beskeden “Stopper”.

I Program-klassen skal du benytte lambda-udtryk til at binde logningsfunktionaliteten til Maskine’s Log-delegate, både for at skrive til konsollen og til en tekstfil.

Klik for at se et forslag til en løsning
using System;
using System.IO;

namespace ConsoleApp
{
    public class Maskine
    {
        public Action<string> Log { get; set; }

        public void Start()
        {
            Log?.Invoke($"{DateTime.Now:HH:mm:ss} Starter");
        }

        public void Stop()
        {
            Log?.Invoke($"{DateTime.Now:HH:mm:ss} Stopper");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Maskine m = new Maskine();

            // Bind Console.WriteLine direkte til Log delegate
            m.Log = msg => Console.WriteLine(msg);

            // Tilføj yderligere en handling til Log delegate for at appende loggen til en fil
            m.Log += msg => File.AppendAllText(@"c:\temp\log.txt", msg + Environment.NewLine);

            m.Start();
            m.Stop();
        }
    }
}

I dette eksempel benytter vi lambda-udtryk til at definere, hvad der skal ske, når Log-delegaten bliver kaldt: først udskrives en besked til konsollen, og derefter appendes beskeden til en fil. Dette viser styrken og fleksibiliteten ved lambda-udtryk i C#.