Подтвердить что ты не робот

С# распечатать имя класса из статической функции

Возможно ли напечатать имя класса из статической функции?

e.g...

public class foo
{

    static void printName()
    {
        // Print the class name e.g. foo
    }

}
4b9b3361

Ответ 1

Console.WriteLine(new StackFrame().GetMethod().DeclaringType);

Ответ 2

У вас есть три способа получить тип (и, следовательно, имя) YourClass, который работает в статической функции:

  • typeof(YourClass) - быстрый (0,043 микросекунды)

  • MethodBase.GetCurrentMethod().DeclaringType - медленный (2,3 микросекунды)

  • new StackFrame().GetMethod().DeclaringType - самый медленный (17,2 микросекунды)


Если использование typeof(YourClass) нежелательно, то MethodBase.GetCurrentMethod().DeclaringType, безусловно, лучший вариант.

Ответ 3

В то время как ответы StackTrace верны, у них есть накладные расходы. Если вы просто хотите избежать изменения имени, рассмотрите typeof(foo).Name. Поскольку статические методы не могут быть виртуальными, обычно это нормально.

Ответ 4

A (чистая, IMO) альтернатива (все еще медленная, как черт возьми, и я бы съежился, если бы увидел это в базе производственного кода):

Console.WriteLine(MethodBase.GetCurrentMethod().DeclaringType);

Кстати, если вы делаете это для ведения журнала, некоторые фреймворки регистрации (например, log4net) имеют встроенную возможность. И да, они предупреждают вас в документах, что это потенциальный кошмар производительности.

Ответ 5

StackTrace класс может это сделать.

Ответ 6

Поскольку статические методы не могут быть унаследованы, имя класса будет известно вам при написании метода. Почему бы просто не переустановить его?