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

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

編輯:關於C語言

文檔非常清晰地表示了一個密閉類不能被進一步擴展或子類 化。在這個例子中,我們希望看到一個錯誤但是什麼也不會生成。必須提醒你的是,我們現在使用的是 beta版本。下一個版本可能會生成一個錯誤。

a.il

.assembly mukhi {}
.class private auto ansi zzz extends [mscorlib]System.Object
{
.method public hidebysig static void vijay() il managed
{
.entrypoint
.locals (class yyy V_0)
newobj     instance void yyy::.ctor()
stloc.0
ret
}
}
.class private auto ansi abstract yyy
{
}

抽象類不能被直接使用。只 能從中派生。上面的代碼應該生成一個錯誤,但並不是這樣。

a.cs

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

a.il

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

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

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