Kal*_*exx 5 c# reflection constants
我正在玩反射,偶然我意识到我可以在const类变量上放置一个自定义字段属性,然后(使用反射)我读取类的字段,找到带有属性的const并执行操作.这工作正常.
我很好奇为什么它工作正常.除非我误解了consts是如何工作的,否则我认为常量被"编译出来",所有对该常量的引用在编译后成为常量的实际值.如果是这种情况,为什么反射仍然可以看到const值?
And*_*are 11
所有对a 的引用const都被编译掉了 - 而不是const声明本身.任何const声明都由编译器作为IL的一部分发出.
这是一个例子(注意IL保留了该const字段).
C#:
class Foo
{
const int i = 0;
}
Run Code Online (Sandbox Code Playgroud)
IL:
.class private auto ansi beforefieldinit Foo
extends [mscorlib]System.Object
{
.method public hidebysig specialname rtspecialname instance void .ctor() cil managed
{
}
.field private static literal int32 i = int32(0)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
270 次 |
| 最近记录: |