c#从静态函数中打印类名

时间:2009-02-16 08:37:00

标签: c# static

是否可以在静态函数中打印类名?

例如......

public class foo
{

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

}

7 个答案:

答案 0 :(得分:53)

您有三个选项可以获取在静态函数中工作的YourClass的类型(以及名称):

  1. typeof(YourClass) - 快速(0.043微秒)

  2. MethodBase.GetCurrentMethod().DeclaringType - 慢(2.3微秒)

  3. new StackFrame().GetMethod().DeclaringType - 最慢(17.2微秒)


  4. 如果不希望使用typeof(YourClass),则MethodBase.GetCurrentMethod().DeclaringType绝对是最佳选择。

答案 1 :(得分:21)

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

答案 2 :(得分:11)

虽然StackTrace的答案是正确的,但它们确实有开销。如果您只想安全地更改名称,请考虑typeof(foo).Name。由于静态方法不能是虚拟的,所以通常应该没问题。

答案 3 :(得分:6)

一个(清洁,IMO)的替代方案(如果我在生产代码库中看到这个,那么我还会感到畏缩):

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

顺便说一句,如果您正在执行此操作以进行日志记录,则某些日志记录框架(例如log4net)具有内置功能。是的,他们在文档中警告您这可能是性能噩梦。

答案 4 :(得分:2)

StackTrace类可以做到这一点。

答案 5 :(得分:2)

自C#6.0起,使用nameof关键字,存在一种更简单,更快速的方式来获取类型名称作为字符串,而无需在代码中键入字符串文字:

raise KeyError

答案 6 :(得分:-2)

由于无法继承静态方法,因此在编写方法时您将知道类名。为什么不直接硬编码呢?