Упражнение №2 - Делегати, изключения и логове | Програмни Среди
Прескочи до съдържанието
Упражнение №2 - Делегати, изключения и логове
Published:

Упражнение №2 - Делегати, изключения и логове

Table of contents

Open Table of contents

Въведение

Цел на упражнението

Запознаване с езика C#, работа с делегати, прихващане на грешки и логъри.

Задачите в упражнението изграждат:

  • Малка студентска информационна система

В това упражнение:

  • Създаване и работа с делегати
  • Прихващане на грешки
  • Използване на логъри

Очакван резултат

Ще записваме в конзолата събития чрез логъри, ще прихващаме грешки и ще се научим да споделяме код между проекти в един Solution.

Задачи за домашна работа

  1. Промяна на HashLogger така, че да може да принтира всички записани съобщения.
  2. Добавяне на метод в HashLogger, който принтира събитие по дадено eventId.
  3. Добавяне на метод за изтриване на събитие по дадено eventId.
  4. Създаване на Logger, който да записва логове във файл.

Важни концепции

Създаване на проект в Visual Studio

  1. Отворете Visual Studio 2022.
  2. Заредете Solution-а от предишното упражнение.
  3. Създайте нов проект чрез десен клик върху Solution-а → Add → New Project.
  4. Изберете Console App и задайте име WelcomeExtended.

Структура на проекта

Създаване на папки

  1. В Solution Explorer → десен бутон върху WelcomeExtended → Add → New Folder.
  2. Създайте следните папки:
  • Helpers
  • Loggers
  • Others

Имплементация

Създаване на клас HashLogger

  1. В папка Loggers → Add → New Item → Class → HashLogger.cs.
  2. Добавете следното поле:
private readonly ConcurrentDictionary<int, string> _logMessages;

Пояснение:

  • readonly – стойността може да се задава само в конструктора.
  • ConcurrentDictionary<int, string> – речник за паралелна работа с данни.
  1. Добавете поле name и конструктор:
private readonly string _name;

public HashLogger(string name)
{
    _name = name;
    _logMessages = new ConcurrentDictionary<int, string>();
}

Добавяне на ILogger чрез NuGet Packages

  1. Десен бутон върху WelcomeExtended → Manage NuGet Packages…
  2. Потърсете Microsoft.Extensions.Logging → Install.
  3. Имплементирайте ILogger в HashLogger.

Създаване на клас LoggerProvider

  1. В папката Loggers → Add → New Item → Class → LoggerProvider.cs.
  2. Имплементирайте ILoggerProvider:
public class LoggerProvider : ILoggerProvider
{
    public ILogger CreateLogger(string categoryName)
    {
        return new HashLogger(categoryName);
    }
}

Създаване на LoggerHelper

  1. В папката Helpers → Add → New Item → Class → LoggerHelper.cs.
  2. Направете класа static и добавете метод:
public static ILogger GetLogger(string categoryName)
{
    return new LoggerProvider().CreateLogger(categoryName);
}

Работа с делегати

Създаване на клас Delegates

  1. В папка Others → Add → New Item → Class → Delegates.cs.
  2. Добавете следните методи:
public static void LogError(string message)
{
    Console.WriteLine($"[Error] {message}");
}

public static void PrintToConsole(string message)
{
    Console.WriteLine(message);
}

Създаване на делегат ActionOnError

  1. В папка Others → Add → New Item → Code File → ActionOnError.cs.
  2. Дефинирайте делегата:
delegate void ActionOnError(string message);

Връзка между проектите

  1. Десен бутон върху WelcomeExtended → Add → Project Reference…
  2. Изберете проекта Welcome и натиснете ОК.

Навързване на кода в Program.cs

try
{
    throw new Exception("Тестова грешка");
}
catch (Exception ex)
{
    LoggerHelper.GetLogger("App").LogError(ex.Message);
}
finally
{
    Console.WriteLine("Програмата завърши изпълнението.");
}

Създаване на метод DisplayError() в UserView (проект Welcome)

public void DisplayError()
{
    throw new Exception("Грешка при визуализацията!");
}

Заключение

След изпълнението на тези стъпки ще имате конзолно приложение, което работи с делегати, логъри, прихващане на грешки и споделени проекти.

Бележка: Следващи упражнения ще разширят функционалността, включвайки работа с файлови логове и външни библиотеки.