Jak*_*cki 9 c# reflection inlining
我的回答对这样问题的一个被瓦伦丁Kuzub,谁认为,通过JIT编译器内联属性将导致反射停止工作评价.
案件如下:
class Foo
{
public string Bar { get; set; }
public void Fuzz<T>(Expression<Func<T>> lambda)
{
}
}
Fuzz(x => x.Bar);
Run Code Online (Sandbox Code Playgroud)
Fuzzfunction接受lambda表达式并使用反射来查找属性.这是MVC HtmlHelper扩展中的常见做法.
即使Bar属性被内联,我也不认为反射会停止工作,因为它的内部调用Bar将被内联,并且typeof(Foo).GetProperty("Bar")仍然会返回有效的内容PropertyInfo.
你能否证实这一点,或者我对方法内联的理解是错误的?
JIT编译器在运行时运行,它不能重写存储在程序集中的元数据信息。反射读取程序集来访问此元数据。所以 JIT 编译器对反射没有影响。
编辑:实际上,C# 编译器本身在编译期间有几个地方“内联”一些信息。例如,常量、枚举和默认参数是“内联”的,因此您无法在反射期间访问它们。但这绝对与您的具体情况无关。
| 归档时间: |
|
| 查看次数: |
261 次 |
| 最近记录: |