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

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

編輯:關於C語言

當你看到上面的代碼時,你將理解為什麼全世界的程序員都討厭寫注釋。C#中的所有注 釋在生成的IL中都會被刪除。單引號不會被復制到IL代碼中。

編譯器對注釋是缺乏“尊重 ”的,它會把所有的注釋都扔掉。程序員認為寫注釋是徒勞的,他們會產生極大的挫折感 ——這並不奇怪。

a.cs

class zzz
{
public static void Main()
{
System.Console.WriteLine("hi "nBye"tNo");
System.Console.WriteLine("""");
System.Console.WriteLine(@"hi "nBye"tNo");
}
}

a.il

.assembly mukhi {}
.class private auto ansi zzz extends [mscorlib]System.Object
{
.method public hidebysig static void vijay() il managed
{
.entrypoint
ldstr      "hi "nBye"tNo"
call       void [mscorlib]System.Console::WriteLine(class System.String)
ldstr      """"
call       void [mscorlib]System.Console::WriteLine(class System.String)
ldstr      "hi ""nBye""tNo"
call       void [mscorlib]System.Console::WriteLine(class System.String)
ret
}
}

Output

hi

Bye No

"

hi "nBye"tNo

C#處理字符串的能力是從IL中繼承而來的。像\n這樣的轉義符會被直接復制。

雙斜線\\,在顯示時,結果是一個單斜線\。

如果一個字符串以一個@符號作為開始,在該字符串中的特殊意思就是這個轉移符會被忽略,而這個字 符串會被逐字顯示,正如上面的程序所顯示的那樣。

如果IL沒有對字符串格式提供支持,那麼它 就會煩心於要處理大多數現代程序語言的所面臨的困境。

a.cs

#define vijay
class zzz
{
public static void Main()
{
#if vijay
System.Console.WriteLine("1");
#else
System.Console.WriteLine("2");
#endif
}
}

a.il

.assembly mukhi {}
.class private auto ansi zzz extends [mscorlib]System.Object
{
.method public hidebysig static void vijay() il managed {
.entrypoint
ldstr      "1"
call void [mscorlib]System.Console::WriteLine(class System.String)
ret
ret
}
}

Output

1

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