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