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