N284A Delegates (log / rå delegate)
I denne opgave vil du arbejde med delegates for at skabe en fleksibel logningsmekanisme i en C# konsolapplikation. Du vil definere en brugerdefineret delegate, som vil blive brugt til at logge beskeder.
Opgavebeskrivelse:
- Skab en tom konsolapp med en klasse
Maskine
. - Definer en brugerdefineret delegate
LogDelegate
, der kan pege på metoder, der tager enstring
som argument og returnerervoid
. - Tilføj en
LogDelegate
-medlem iMaskine
-klassen. - Implementer
Start
- ogStop
-metoder iMaskine
-klassen, der brugerLogDelegate
til at logge beskeder med den aktuelle tid. - I
Program
-klassen, opret en metodeAppendLog
, som skriver tekst til en fil, og en anden metode, der skriver til konsollen.
Klik for at se et forslag til en løsning
Her er et forslag til, hvordan koden kan implementeres:
using System;
using System.IO;
namespace ConsoleApp
{
public class Maskine
{
public delegate void LogDelegate(string message);
public LogDelegate Log;
public void Start()
{
Log?.Invoke(DateTime.Now.ToString("HH:mm:ss") + " Starter");
}
public void Stop()
{
Log?.Invoke(DateTime.Now.ToString("HH:mm:ss") + " Stopper");
}
}
class Program
{
static void Main(string[] args)
{
Maskine m = new Maskine();
m.Log += ConsoleLog;
m.Log += AppendLog;
m.Start();
m.Stop();
}
static void ConsoleLog(string txt)
{
Console.WriteLine(txt);
}
static void AppendLog(string txt)
{
File.AppendAllText(@"c:\temp\log.txt", txt + Environment.NewLine);
}
}
}
Denne løsning illustrerer, hvordan man opretter og bruger brugerdefinerede delegates i C#. Maskine
-klassen definerer en LogDelegate
, som bruges til at logge beskeder. Metoderne ConsoleLog
og AppendLog
i Program
-klassen bliver bundet til denne delegate, hvilket giver mulighed for at logge beskeder både til konsollen og til en fil.