内打印类名是否有可能从一个静态函数内打印类的名字?C#从静态函数
e.g ...
public class foo
{
static void printName()
{
// Print the class name e.g. foo
}
}
内打印类名是否有可能从一个静态函数内打印类的名字?C#从静态函数
e.g ...
public class foo
{
static void printName()
{
// Print the class name e.g. foo
}
}
Console.WriteLine(new StackFrame().GetMethod().DeclaringType);
StackTrace类可以做到这一点。
虽然StackTrace的回答是正确的,但它们确实有开销。如果您只是想要改变名称的安全性,请考虑typeof(foo).Name
。由于静态方法不能是虚拟的,所以通常应该很好。
这是一个很好的观点。显然,如果你控制方法,那么你控制类的名称,所以整个事情有点学术。 – 2009-02-16 09:02:44
所有我用这为是登录异常行为,这样我就可以使用堆栈跟踪方法执行此日志记录活动后,将(可能)停止的开销生活。 – 2009-02-16 09:24:49
A(清洁剂,IMO)的替代(如地狱依然很慢,如果我看到这个在生产代码库我会畏缩):
顺便说一句,如果你这样做了记录,一些日志框架(如log4net)有内置的能力。是的,他们在文档中警告你这是一个潜在的性能噩梦。
因为静态方法不能继承,当你写的方法的类名称将知道你。为什么不直接硬编码呢?
你有三种选择,以获得在静态函数工作的YourClass
类型(因此名称):
typeof(YourClass)
- 快(0.043微秒)
MethodBase.GetCurrentMethod().DeclaringType
- 慢( 2.3微秒)
new StackFrame().GetMethod().DeclaringType
- 最慢(17.2微秒)
如果使用typeof(YourClass)
是不可取的,那么MethodBase.GetCurrentMethod().DeclaringType
绝对是最好的选择。
正如@Jamezor指出,这可能是一个性能噩梦。 干杯 – systemkern 2015-01-07 06:25:57