Я использую log4net, и в нашем коде много такого:
public class Foo {
private static readonly ILog log = LogManager.GetLogger(typeof(Foo));
....
}
Единственным недостатком является то, что это означает, что мы вставляем этот раздел из 10 слов повсюду, и время от времени кто-то забывает изменить имя класса. В часто задаваемых вопросах log4net также упоминается эта альтернативная возможность, которая еще более многословно:
public class Foo {
private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
...
}
Можно ли написать декоратор, чтобы определить это? Я бы очень хотел сказать просто:
[LogMe] // or perhaps: [LogMe("log")]
public class Foo {
...
}
Я делал подобные вещи на других языках, но никогда на статически компилируемых языках, таких как C#. Могу ли я определить членов класса из декоратора?
Правка: Хех. Я программист Лисп. Я ценю предложения по переключению языков, но на самом деле, если бы я собирался переключать языки для улучшения возможностей метапрограммирования, я бы прошел весь путь до Лиспа, а не наполовину. К сожалению, использование другого языка в этом проекте невозможно.