Паттерн
IDisposable помогает избежать утечек и безопасно освобождать внешние ресурсы вручную.Что важно знать:
• Финализатор не обязателен;
• Вызов можно повторить;
• Освобождает не только файлы.
Он делает код предсказуемым и избавляет от скрытых ошибок при работе с системными ресурсами.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11❤8👍5🤝1
Сегодня покажу, как уменьшить размер JPEG и PNG прямо из кода, без внешних инструментов и зависимостей.
Что важно знать:
• JPEG сжимается числом;
• PNG не теряет качество;
• Всё работает кроссплатформенно.
ImageSharp подойдёт и для ботов, и для сайтов, и просто для уборки тяжёлых картинок.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥6❤3🤝2
❤15👍8🔥7
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤17🔥6👍3👎1
Интерсепторы: ловим вызов метода до его выполнения — без сторонних библиотек!
Иногда нужно логировать вызовы, проверять аргументы или внедрять кросс-срезовые фичи в одном месте — вместо разбросанных
Подключаем нужные пространства имён и объявляем универсальный интерсептор на основе
Теперь создаём прокси для вашего сервиса и вызываем метод через интерсептор:
🔥 Получаем логирование каждого вызова без сторонних AOP-библиотек — только .NET Core в комплекте!
➡ C# Ready | #практика
Иногда нужно логировать вызовы, проверять аргументы или внедрять кросс-срезовые фичи в одном месте — вместо разбросанных
Console.WriteLine по всему коду.Подключаем нужные пространства имён и объявляем универсальный интерсептор на основе
DispatchProxy:using System;
using System.Reflection;
public class LoggingInterceptor<T> : DispatchProxy
{
public T Target { get; set; }
protected override object Invoke(MethodInfo method, object[] args)
{
Console.WriteLine($"➡️ Вызов метода: {method.Name}");
return method.Invoke(Target, args);
}
}
Теперь создаём прокси для вашего сервиса и вызываем метод через интерсептор:
// Предположим, есть интерфейс IMyService и класс MyService
IMyService real = new MyService();
var proxy = DispatchProxy.Create<IMyService, LoggingInterceptor<IMyService>>();
((LoggingInterceptor<IMyService>)proxy).Target = real;
// Все вызовы пойдут через интерсептор
proxy.DoWork();
🔥 Получаем логирование каждого вызова без сторонних AOP-библиотек — только .NET Core в комплекте!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10❤6👍4