Table of contents
Open Table of contents
Въведение
Цел на упражнението
Запознаване с езика C#, работа с делегати, прихващане на грешки и логъри.
Задачите в упражнението изграждат:
- Малка студентска информационна система
В това упражнение:
- Създаване и работа с делегати
- Прихващане на грешки
- Използване на логъри
Очакван резултат
Ще записваме в конзолата събития чрез логъри, ще прихващаме грешки и ще се научим да споделяме код между проекти в един Solution.
Задачи за домашна работа
- Промяна на
HashLoggerтака, че да може да принтира всички записани съобщения. - Добавяне на метод в
HashLogger, който принтира събитие по дадено eventId. - Добавяне на метод за изтриване на събитие по дадено eventId.
- Създаване на Logger, който да записва логове във файл.
Важни концепции
Създаване на проект в Visual Studio
- Отворете Visual Studio 2022.
- Заредете Solution-а от предишното упражнение.
- Създайте нов проект чрез десен клик върху Solution-а →
Add→New Project. - Изберете Console App и задайте име
WelcomeExtended.
Структура на проекта
Създаване на папки
- В Solution Explorer → десен бутон върху
WelcomeExtended→Add→New Folder. - Създайте следните папки:
HelpersLoggersOthers
Имплементация
Създаване на клас HashLogger
- В папка
Loggers→Add→New Item→Class→HashLogger.cs. - Добавете следното поле:
private readonly ConcurrentDictionary<int, string> _logMessages;
Пояснение:
readonly– стойността може да се задава само в конструктора.ConcurrentDictionary<int, string>– речник за паралелна работа с данни.
- Добавете поле
nameи конструктор:
private readonly string _name;
public HashLogger(string name)
{
_name = name;
_logMessages = new ConcurrentDictionary<int, string>();
}
Добавяне на ILogger чрез NuGet Packages
- Десен бутон върху
WelcomeExtended→Manage NuGet Packages… - Потърсете
Microsoft.Extensions.Logging→Install. - Имплементирайте
ILoggerвHashLogger.
Създаване на клас LoggerProvider
- В папката
Loggers→Add→New Item→Class→LoggerProvider.cs. - Имплементирайте
ILoggerProvider:
public class LoggerProvider : ILoggerProvider
{
public ILogger CreateLogger(string categoryName)
{
return new HashLogger(categoryName);
}
}
Създаване на LoggerHelper
- В папката
Helpers→Add→New Item→Class→LoggerHelper.cs. - Направете класа static и добавете метод:
public static ILogger GetLogger(string categoryName)
{
return new LoggerProvider().CreateLogger(categoryName);
}
Работа с делегати
Създаване на клас Delegates
- В папка
Others→Add→New Item→Class→Delegates.cs. - Добавете следните методи:
public static void LogError(string message)
{
Console.WriteLine($"[Error] {message}");
}
public static void PrintToConsole(string message)
{
Console.WriteLine(message);
}
Създаване на делегат ActionOnError
- В папка Others →
Add→New Item→Code File→ActionOnError.cs. - Дефинирайте делегата:
delegate void ActionOnError(string message);
Връзка между проектите
- Десен бутон върху
WelcomeExtended→Add→Project Reference… - Изберете проекта
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("Грешка при визуализацията!");
}
Заключение
След изпълнението на тези стъпки ще имате конзолно приложение, което работи с делегати, логъри, прихващане на грешки и споделени проекти.
Бележка: Следващи упражнения ще разширят функционалността, включвайки работа с файлови логове и външни библиотеки.