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:
Maskine m = new Maskine();
m.Log += ConsoleLog;
m.Log += AppendLog;
m.Start();
m.Stop();
void ConsoleLog(string txt)
{
Console.WriteLine(txt);
}
void AppendLog(string txt)
{
File.AppendAllText(@"c:\temp\log.txt", txt + Environment.NewLine);
}
public delegate void LogDelegate(string message);
public class Maskine
{
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");
}
}
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.