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

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

編輯:關於C語言

我們只創建了一個對象,它是類bb的一個實例。有3個構造函數會被調用,而不是2個構造函數 (一個是基類的,一個是派生類的)。

l 在IL中,首先,會調用沒有參數的構造函數。

l 然後,當到達構造函數bb時,就會對相同類的另一個帶有參數值20的構造函數進行調用。This(20)會被轉 換為對一個實際的帶有一個參數的構造函數的調用。

l 現在,我們轉移到bb的一個構造函數上。 這裡,初始化對aa的一個構造函數的調用,被作為需要首先被調用的基類的構造函數。

幸運的是 ,aa的基類構造函數不會使我們徒勞無功。在它完成執行之後,就會顯示這個字符串,而最後,bb的無參 構造函數會被調用。

因此,base和this在IL中是不存在的,它們是編譯期間被硬編譯到IL代碼中 的“赝品”。

a.il

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

Output

Exception occurred: System.MethodAccessException: aa..ctor()

at zzz.vijay()

我們不能在類的 外部訪問它的私有成員。因此,正如我們在類bb中創建唯一的私有構造函數那樣,我們不能創建任何看上 去像類bb的對象。在C#中,同樣的規則也適用於訪問修飾符。

a.cs

public class zzz
{
public static void Main()
{
yyy a = new yyy();
}
}
class yyy
{
public int i;
public bool j;
public yyy()
{
System.Console.WriteLine(i);
System.Console.WriteLine(j);
}
}

a.il

.assembly mukhi {}
.class public 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 yyy extends [mscorlib]System.Object
{
.fIEld public int32 i
.fIEld public bool j
.method public hidebysig specialname rtspecialname instance void .ctor() il managed
{
ldarg.0
call       instance void [mscorlib] System.Object::.ctor()
ldarg.0
ldfld      int32 yyy::i
call       void [mscorlib]System.Console::WriteLine(int32)
ldarg.0
ldfld bool yyy::j
call void [mscorlib]System.Console::WriteLine(bool)
ret
}
}

Output

0

False

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