Есть ли способ динамически перехватывать вызовы методов в классе в C #, эквивалентном механизму Perl AUTOLOAD?
В данном случае у меня есть вспомогательный класс с методом «core», который записывает в системный журнал событий, и несколько вспомогательных перегрузок для упрощения наиболее распространенного использования.
Теперь я вижу появляющийся шаблон кода, в котором я использую try ... catch, чтобы попытаться написать запись, но игнорирую любые сбои, связанные с фактической обработкой журнала событий. Например, при попытке зарегистрировать исключение приложения, когда журнал событий заполнен, я хочу, чтобы приложение аварийно завершало работу с «настоящим» исключением приложения, а не с исключением «журнала событий».
В настоящее время я только что создал новый набор перегрузок, который инкапсулирует это, но я действительно хотел бы иметь динамическую обработку этих методов, то есть любой вызов метода с именем метода, начинающимся с «Try», вызывает соответствующий « реальный "метод, инкапсулированный в try .. catch. Это было бы так легко в Perl ;-), но может ли это быть сделано в C #?
Код, который может упростить объяснение:
public class SomeClass
{
// Core functionality
public static void WriteToLog(string message, EventLogEntryType type)
{
...
}
// Overloaded methods for common uses
public static void WriteToLog(SomeObject obj)
{
WriteToLog(obj.ToString(), EventLogEntryType.Information);
}
public static void WriteToLog(SomeException ex)
{
WriteToLog(ex.Message, EventLogEntryType.Error);
}
// Additional wrappers that ignores errors
// These are what I'd like to handle dynamically instead of manually:
public static void TryWriteToLog(SomeObject obj)
{
try
{
WriteToLog(obj);
}
catch (Exception logException)
{
Console.WriteLine(logException.Message);
}
}
public static void TryWriteToLog(SomeException ex)
{
try
{
WriteToLog(ex);
}
catch (Exception logException)
{
Console.WriteLine(logException.Message);
}
}
}