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