MethodBase.GetCurrentMethod()。Name vs [CallerMemberName]

时间:2013-07-13 01:19:02

标签: c# .net reflection compiler-services

有什么区别和对代码的影响?

性能和限制如何,哪种更适合?

新属性:
- [CallerFilePathAttribute]
- [CallerMemberName]
- [CallerLineNumber]

今天它们也可以在.NET 4中使用(它很容易开发并且看起来很神奇)..它们的值在运行时被编译或解析?

1 个答案:

答案 0 :(得分:7)

首先,MethodBase.GetCurrentMethod()会返回当前方法,而您可以使用[CallerMemberName]等传递有关调用方法的一些信息进入当前的方法。

前者在运行时使用反射进行评估,因此相对较慢,而后者在编译时进行处理,基本上是无操作性能。我实际上在测试中证实了这一点。每次反射都会花费大约20微秒的时间,如果经常调用则会非常重要,而[Caller...]属性不会产生可测量的惩罚。