Gå til indholdet

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 en string som argument og returnerer void.
  • Tilføj en LogDelegate-medlem i Maskine-klassen.
  • Implementer Start- og Stop-metoder i Maskine-klassen, der bruger LogDelegate til at logge beskeder med den aktuelle tid.
  • I Program-klassen, opret en metode AppendLog, 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.