程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 《C# to IL》第四章 關鍵字和操作符(下)(8)

《C# to IL》第四章 關鍵字和操作符(下)(8)

編輯:關於C語言

所有的常量都是由編譯器計算的,即使它們 可能關聯到其它常量,但它們會被設定為一個絕對的值。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
}
}

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved