是否可以在静态函数中打印类名?
例如......
public class foo { static void printName() { // Print the class name e.g. foo } }
Jamezor.. 55
您有三个选项可以YourClass
在静态函数中获取该工作的类型(以及名称):
typeof(YourClass)
- 快(0.043微秒)
MethodBase.GetCurrentMethod().DeclaringType
- 慢(2.3微秒)
new StackFrame().GetMethod().DeclaringType
- 最慢(17.2微秒)
如果使用typeof(YourClass)
不合适,那么MethodBase.GetCurrentMethod().DeclaringType
绝对是最好的选择.
您有三个选项可以YourClass
在静态函数中获取该工作的类型(以及名称):
typeof(YourClass)
- 快(0.043微秒)
MethodBase.GetCurrentMethod().DeclaringType
- 慢(2.3微秒)
new StackFrame().GetMethod().DeclaringType
- 最慢(17.2微秒)
如果使用typeof(YourClass)
不合适,那么MethodBase.GetCurrentMethod().DeclaringType
绝对是最好的选择.
Console.WriteLine(new StackFrame().GetMethod().DeclaringType);
虽然StackTrace的答案是正确的,但它们确实有开销.如果您只想安全地改变名称,请考虑typeof(foo).Name
.由于静态方法不能是虚拟的,因此通常应该没问题.
一个(更清洁,IMO)的替代方案(如果我在生产代码库中看到这个,我会很畏缩)
Console.WriteLine(MethodBase.GetCurrentMethod().DeclaringType);
顺便说一句,如果您正在为日志记录执行此操作,则某些日志记录框架(例如log4net)具有内置的功能.是的,他们在文档中警告您,这是一个潜在的性能噩梦.