Sto utilizzando log4net, e abbiamo un sacco di questo nel nostro codice:Decoratore di classe per dichiarare membro statico (ad es. Per log4net)?
public class Foo {
private static readonly ILog log = LogManager.GetLogger(typeof(Foo));
....
}
Uno svantaggio è che significa che stiamo incollando questa sezione 10-word in tutto, e ogni ora e poi qualcuno dimentica di cambiare il nome della classe. Il log4net FAQ menziona anche questa possibilità alternativa, che è ancora più dettagliato:
public class Foo {
private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
...
}
È possibile scrivere un decoratore per definire questo? Mi piacerebbe davvero dire semplicemente:
[LogMe] // or perhaps: [LogMe("log")]
public class Foo {
...
}
Ho fatto cose simili in altre lingue, ma mai un linguaggio staticamente compilato come C#. Posso definire i membri della classe da un decoratore?
Modifica: Heh. Sono un programmatore Lisp. Apprezzo i suggerimenti per cambiare lingua, ma in realtà, se avessi intenzione di passare da una lingua all'altra per migliorare le capacità di metaprogrammazione, andrei fino a Lisp invece di esserne per metà. Sfortunatamente l'uso di una lingua diversa non è un'opzione su questo progetto.
Questo è vero, e ho misspoke. Comunque, immagino di sperare in qualche tipo di hook di inizializzazione globale che possa essere usato per convertire gli attributi in membri. – Ken