🖥 Малоизвестная функция C#: Caller Information
❗️ Функциональность
Caller Information позволяет передавать в метод информацию о вызывающем его коде, например:
- Имя файла
- Номер строки в файле
- Имя вызывающего метода
🌟 Эта особенность может быть крайне полезной для логирования, отладки и тестирования кода. Хотя она существует с версии C# 5.0, о ней часто забывают.
❓ Как это работает?
💡 Для получения информации о вызывающем методе используются специальные атрибуты:
🌟
[CallerFilePath] — возвращает полный путь к исходному файлу, в котором был вызван метод.
🌟
[CallerLineNumber] — возвращает номер строки в файле, где был вызван метод.
🌟
[CallerMemberName] — возвращает имя метода или свойства, из которого был вызван метод.
🔍 Пример использования
Предположим, у нас есть метод
Log, который записывает сообщение в консоль вместе с информацией о вызове:
using System;
using System.Runtime.CompilerServices;
class Program
{
static void Main()
{
TestMethod();
}
static void TestMethod()
{
Log("Это тестовое сообщение");
}
static void Log(string message,
[CallerFilePath] string filePath = "",
[CallerLineNumber] int lineNumber = 0,
[CallerMemberName] string memberName = "")
{
Console.WriteLine($"Сообщение: {message}");
Console.WriteLine($"Файл: {filePath}");
Console.WriteLine($"Метод: {memberName}");
Console.WriteLine($"Строка: {lineNumber}");
}
}
🔍 Вывод:
Файл: C:\Users\...\Program.cs
Метод: TestMethod
Строка: 11
💡 Применение:
🌟 Логирование — автоматическое добавление контекста при записи логов.
🌟 Отладка — упрощение поиска ошибок, так как можно сразу определить файл, метод и строку.
🌟 Анализ производительности — отслеживание производительности конкретных методов.
🌟 Асинхронные вызовы — идентификация методов в асинхронных цепочках вызовов.
@csharp_1001_notes