6

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

那么性能和限制呢,什么会更合适?

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

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

4

1 回答 1

10

一方面,MethodBase.GetCurrentMethod()返回当前方法,而您可以使用[CallerMemberName]etc. 将有关调用方法的一些信息传递到当前方法中。

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

于 2013-11-21T05:54:46.027 回答