Может ли статическое поле получить имя класса, в котором оно объявлено? - PullRequest
0 голосов
/ 08 сентября 2011

Можно ли ссылаться на имя класса, в котором находится фрагмент кода?

Например, при добавлении операторов ведения журнала с помощью log4net мы инициализируем журнал следующим образом в каждом классе ...

private static readonly ILog Log = LogManager.GetLogger(typeof(EmploymentCorrectionUpdate));

Где 'EmploymentCorrectionUpdate' - это имя класса, содержащего код.

Было бы намного проще, если бы имя класса можно было получить в общем виде.

Обратите внимание: это статическое поле.

Ответы [ 4 ]

3 голосов
/ 08 сентября 2011

this.GetType() должно помочь, если вы не находитесь в статическом контексте.

Если вы находитесь в статическом контексте, используйте

Type t = MethodBase.GetCurrentMethod().DeclaringType

(из .NET: Определите тип класса «this» в его статическом методе )

2 голосов
/ 08 сентября 2011

да, как ни странно, мы тоже используем его для регистрации, хотя я не люблю использовать отражение для этих целей:

MethodInfo.GetCurrentMethod().DeclaringType.Name;
1 голос
/ 08 сентября 2011

Для метода экземпляра это просто (this.GetType()), но вам нужен статический метод уровня класса.

Я думаю, что это сложно (или медленно). Если бы был простой / быстрый способ, разработчики log4net использовали бы его.

0 голосов
/ 08 сентября 2011

Вы можете использовать приведенный ниже код для получения имени класса.

MethodBase method = frame.GetMethod ();method.DeclaringType.Name

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...