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
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();

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

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#.