有什么区别和对代码的影响?
性能和限制如何,哪种更适合?
新属性:
- [CallerFilePathAttribute]
- [CallerMemberName]
- [CallerLineNumber]
今天它们也可以在.NET 4中使用(它很容易开发并且看起来很神奇)..它们的值在运行时被编译或解析?
答案 0 :(得分:7)
首先,MethodBase.GetCurrentMethod()
会返回当前方法,而您可以使用[CallerMemberName]
等传递有关调用方法的一些信息进入当前的方法。
前者在运行时使用反射进行评估,因此相对较慢,而后者在编译时进行处理,基本上是无操作性能。我实际上在测试中证实了这一点。每次反射都会花费大约20微秒的时间,如果经常调用则会非常重要,而[Caller...]
属性不会产生可测量的惩罚。