WEB开发网
开发学院软件开发C语言 《C# to IL》第四章 关键字和操作符(下) 阅读

《C# to IL》第四章 关键字和操作符(下)

 2009-06-03 08:30:36 来源:WEB开发网   
核心提示: Output10常量是只存在于编译期间的一个实体,它在运行期间是不可见的,《C# to IL》第四章 关键字和操作符(下)(8),这就证实了编译器会移除对编译期间对象的所有跟踪,在转换到IL的过程中,IL运行时不会为文本字段分配任何内存,这涉及到元数据的领域,在C#中出现的所有int i都

Output

10

常量是只存在于编译期间的一个实体。它在运行期间是不可见的。这就证实了编译器会移除对编译期间对象的所有跟踪。在转换到IL的过程中,在C#中出现的所有int i都会被数字10取代。

a.cs

public class zzz
{
const int i = j + 4;
const int j = k - 1;
const int k = 3;
public static void Main()
{
System.Console.WriteLine(k);
}
}

a.il

.assembly mukhi {}
.class private auto ansi zzz extends [mscorlib]System.Object
{
.field private static literal int32 i = int32(0x00000006)
.field private static literal int32 j = int32(0x00000002)
.field private static literal int32 k = int32(0x00000003)
.method public hidebysig static void vijay() il managed
{
.entrypoint
ldc.i4.3
call void [mscorlib]System.Console::WriteLine(int32)
ret
}
}

Ouput

3

所有的常量都是由编译器计算的,即使它们可能关联到其它常量,但它们会被设定为一个绝对的值。IL运行时不会为文本字段分配任何内存。这涉及到元数据的领域,稍后我们将对其分析。

a.il

.assembly mukhi {}
.class private auto ansi zzz extends [mscorlib]System.Object
{
.field private static literal int32 i = int32(0x00000006)
.method public hidebysig static void vijay() il managed
{
.entrypoint
ldc.i4.6
stsfld int32 zzz::i
ret
}
}

上一页  3 4 5 6 7 8 9 10  下一页

Tags:to IL 第四章

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接