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