В настоящее время я пытаюсь расширить поведение метода Ilog.Error
Обычно я бы просто наследовал от класса, перезаписывал метод, который хочу расширить, и вместо этого использовал бы мой новый класс, например:
public class MyLogger:Logger
{
overwrite Error(..)
{
base.Error(..);
Mycode(..);
}
}
Однако, поскольку я имею дело с интерфейсами при создании регистраторов через Logmanager, не существует класса, который я мог бы расширить таким образом. Есть ли другой способ расширения методов, который также работает с интерфейсами?
Пожалуйста, попробуйте использовать методы расширения, чтобы не переопределять основной метод ошибки, вы можете расширить интерфейс Ilogger любым поведением, которое вы хотите расширить.
overwrite
не является ключевым словом в C#
. Используйте override
. Для того чтобы этот метод был замещен из базового класса, он должен быть помечен либо virtual
, что означает, что он может быть замещен, либо abstract
, что означает, что он имеет должен быть замещен. Дополнительные ссылки см. Здесь:
Обновлено:
Поскольку в некоторых комментариях говорится, что вы должны создать метод расширения, вы можете сделать это следующим образом:
public static class Log4NetExtension
{
public static void LogError(this Logger logger)
{
logger.Error(..);
//your code
}
}
и используйте это так:
var logger = new Logger();
logger.LogError();
Спасибо за толчок в сторону методов расширения, это то, что я искал.
Думаю, можно использовать Методы расширения.