【发布时间】:2011-02-20 15:05:15
【问题描述】:
我正在使用 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# 这样的静态编译语言。我可以从装饰器中定义类成员吗?
编辑:呵呵。我是一名 Lisp 程序员。我很欣赏切换语言的建议,但实际上,如果我要切换语言以获得更好的元编程功能,我会一直使用 Lisp,而不是半途而废。不幸的是,在这个项目中不能选择使用不同的语言。
【问题讨论】:
标签: c# decorator static-members