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

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

編輯:關於C語言

下面關注的是2個字符串的連接。C#編譯器通過將它們轉換 為一個字符串來實現。這取決於編譯器優化常量的風格。存儲在局部變量中的值隨後被放置在棧上,從而 在運行期,C#編譯器會盡可能的優化代碼。

a.cs

class zzz
{
public static void Main()
{
string s = "hi" ;
string t = s + "bye";
System.Console.WriteLine(t);
}
}

a.il

.assembly mukhi {}
.class private auto ansi zzz extends [mscorlib]System.Object
{
.method public hidebysig static void vijay() il managed
{
.entrypoint
.locals (class System.String V_0,class System.String V_1)
ldstr      "hi"
stloc.0
ldloc.0
ldstr "bye"
call class System.String [mscorlib]System.String::Concat(class System.String,class System.String)
stloc.1
ldloc.1
call void [mscorlib]System.Console::WriteLine(class System.String)
ret
}
}

Output

hibye

無論編譯器何時對變量進行處理,都會在編譯器間忽略它們 的值。在上面的程序中會執行以下步驟:

l 變量s和t會被相應地轉換為V_0和V_1。

l 為局 部變量V_0分配字符串"hi"。

l 隨後這個變量會被放到棧上。

l 接下來,常量 字符串"bye"會被放到棧上。

l 之後,+操作符被轉化為靜態函數Concat,它屬於 String類。

l 這個方法會連接兩個字符串並在棧上創建一個新的字符串。

l 這個合成的字 符串會被存儲在變量V_1中。

l 最後,這個合成的字符串會被打印出來。

在C#中,有兩個 PLUS(+)操作符。

l 一個處理字符串。這個操作符會被轉換為IL中String類的Concat函數。

l 另一個則處理數字。這個操作符會被轉換為IL中的add指令。

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