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

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

 2009-06-03 08:30:36 来源:WEB开发网   
核心提示: OutputException occurred: System.MissingFieldException: zzz.i at zzz.vijay()文本字段表示一个常量值,在IL中,《C# to IL》第四章 关键字和操作符(下)(9),不允许访问任何文本字段,编译器在编译期间不会生成

Output

Exception occurred: System.MissingFieldException: zzz.i

at zzz.vijay()

文本字段表示一个常量值。在IL中,不允许访问任何文本字段。编译器在编译期间不会生成任何错误,但是在运行期间会抛出一个异常。我们希望一个编译期间错误,因为我们在指令stsfld中使用了一个文本字段。

a.cs

public class zzz
{
public static readonly int i = 10;
public static void Main()
{
System.Console.WriteLine(i);
}
}

a.il

.assembly mukhi {}
.class private auto ansi zzz extends [mscorlib]System.Object
{
.field public static initonly int32 i
.method public hidebysig static void vijay() il managed
{
.entrypoint
ldsfld int32 zzz::i
call void [mscorlib]System.Console::WriteLine(int32)
ret
}
.method public hidebysig specialname rtspecialname static void .cctor() il managed
{
ldc.i4.s   10
stsfld int32 zzz::i
ret
}
}

Output

10

只读字段不能被修改。在IL中,有一个名为initonly的修饰符,它实现了相同的概念。

a.il

.assembly mukhi {}
.class private auto ansi zzz extends [mscorlib]System.Object
{
.field public static initonly int32 i
.method public hidebysig static void vijay() il managed
{
.entrypoint
ldc.i4.s   10
stsfld int32 zzz::i
ldsfld int32 zzz::i
call void [mscorlib]System.Console::WriteLine(int32)
ret
}
}

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

Tags:to IL 第四章

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