#c#
#c#
Вопрос:
Допустим, у вас есть:
class Foo
{
static string f = nameof(Foo);
}
Это работает, но мне не нравится иметь явное имя типа nameof
. В контексте экземпляра я мог бы использовать this.GetType().Name
, но как получить имя типа в статическом контексте (без явной ссылки на тип, как указано выше)?
Комментарии:
1.Но даже тогда
GetType
вы получаете тип среды выполнения, который, если используется наследование, не обязательно совпадает со статическим типом, в котором находится код. По крайней мере, теперь у нас естьnameof
то, что могут понять инструменты рефакторинга. Раньше нам приходилось просто использовать строку…2. Нет, вы не можете..
3. @Damien_The_Unbeliever, верно, но этого было бы достаточно для моих нужд (большую часть времени я использую закрытые типы).
Ответ №1:
Попробуйте это:
class Foo
{
static string f = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name;
}
Комментарии:
1. Это статическое поле объекта. Это не сам метод, поэтому вы не получите тип
Foo
здесь.2. @Sefe: Ты пробовал?
f
в приведенном выше примере кода должно быть установлено значение «Foo».3. @Sefe — инициализаторы оказываются внутри метода, просто не вашего собственного написания, если вы его не предоставляете. Класс будет иметь статический конструктор, и код инициализатора заканчивается там.