Упражнение №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-аAddNew Project.
  4. Изберете Console App и задайте име WelcomeExtended.

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

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

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

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

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

  1. В папка LoggersAddNew ItemClassHashLogger.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. Десен бутон върху WelcomeExtendedManage NuGet Packages…
  2. Потърсете Microsoft.Extensions.LoggingInstall.
  3. Имплементирайте ILogger в HashLogger.

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

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

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

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

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

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

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

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

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

  1. В папка OthersAddNew ItemCode FileActionOnError.cs.
  2. Дефинирайте делегата:
delegate void ActionOnError(string message);

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

  1. Десен бутон върху WelcomeExtendedAddProject 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("Грешка при визуализацията!");
}

Заключение

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

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