我使用log4net的,我們有我們的代碼有很多這樣的:聲明靜態成員的類裝飾器(例如,用於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#這樣的靜態編譯語言。我可以從裝飾者定義類成員嗎?
編輯:heh。我是一名Lisp程序員。我很欣賞切換語言的建議,但實際上,如果我要切換語言以實現更好的元編程功能,那麼我會一路走向Lisp,而不是被半路而廢。不幸的是使用不同的語言不是這個項目的一個選項。
這是真的,我說錯。不過,我想我希望能夠使用某種全局初始化鉤子來將屬性轉換爲成員。 – Ken 2010-05-17 21:55:31