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

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

編輯:關於C語言

在C#中,一個命名空間可以出現在另一個命名空間中,但是C#編譯器更喜歡只使用一個 單獨的命名空間,從而IL輸出只顯示了一個命名空間。IL中的.namespace指令在概念上類似於C#中的 namespace關鍵字。命名空間的觀點起源於IL而不是C#這樣的程序語言。

a.cs

namespace mukhi
{
class zzz
{
public static void Main()
{
}
}
}
namespace mukhi
{
class pqr
{
}
}

a.il

.assembly mukhi {}
.namespace mukhi
{
.class private auto ansi zzz extends [mscorlib]System.Object
{
.method public hidebysig static void vijay() il managed
{
.entrypoint
ret
}
}
.class private auto ansi pqr extends [mscorlib]System.Object
{
}
}

在C#文件中,我們可能有2個名為mukhi的命名空間,但是它們會變成IL文件中的一個大 的命名空間,而它們的內容會被合並。合並命名空間的工具是由C#編譯器提供的。

設計者認為這 麼處理是恰當的——他們本可以將上面的程序替代地標記為一個錯誤。

a.cs

class zzz
{
public static void Main()
{
int i = 6;
zzz a = new zzz();
a.abc(ref i);
System.Console.WriteLine(i);
}
public void abc(ref int i)
{
i = 10;
}
}

a.il

.assembly mukhi {}
.class private auto ansi zzz extends [mscorlib]System.Object
{
.method public hidebysig static void vijay() il managed
{
.entrypoint
.locals (int32 V_0,class zzz V_1)
ldc.i4.6
stloc.0
newobj instance void zzz::.ctor()
stloc.1
ldloc.1
ldloca.s V_0
call instance void zzz::abc(int32&)
ldloc.0
call void [mscorlib]System.Console::WriteLine(int32)
ret
}
.method public hidebysig instance void abc(int32& i) il managed
{
ldarg.1
ldc.i4.s   10
stind.i4
ret
}
}

Output

10

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