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

《C# to IL》第一章 IL入門(4)

編輯:關於C語言

現在我們 將看到如何將參數傳遞到一個函數中。

a.il

.assembly mukhi {}
.method void vijay()
{
      .entrypoint
      ldstr "hell"
      call void System.Console::WriteLine(class System.String)
      ret
}

Output

hell

匯編器指令ldstr把字符串放到棧上。Ldstr的名稱是文本 "load a string on the stack"的縮寫版本。棧是一塊內存區域,它用來傳遞參數到函數中。 所有的函數從棧上接收它們的參數。因此,像ldstr這樣的指令是必不可少的。

a.il

.assembly mukhi {}
.method public hidebysig static void vijay()il managed
{
      .entrypoint
      ldstr "hell"
      call void System.Console::WriteLine(class System.String)
      ret
}

Output

hell

我們在方法vijay上添加了一些特性。接下來我們將逐個講解 它們。

public:被稱為可訪問特性,它決定了都有誰可以訪問一個方法。public意味著這個方法 可以被程序的其他任何部分所訪問。

hidebysig:類可以從其它多個類中派生。hidebysig特性保 證了父類中的函數在具有相同名稱或簽名的派生類中會被隱藏。在這個例子中,它保證了如果函數vijay 出現在基類中,那麼它在派生類中就是不可見的。

static:方法可以是靜態的或非靜態的。靜態 方法屬於一個類而不屬於一個實例。因此, 就像我們只有一個單獨的類,我們不能擁有一個靜態函數的 多份復制。靜態函數可以在哪裡創建是沒有約束的。帶有entrypoint指令的函數必須是靜態的。靜態函數 必須具有相關聯的實體或者源代碼,並且使用類型名稱而不是實例名稱來引用它們。

il managed: 由於它的復雜性質,我們將關於這個特性的解釋延後。當時機成熟時,它的功能將會被解釋清楚。

上面涉及的特性並沒有修改函數的輸出。 稍後,你將明白為什麼我們要提供這些特性的解釋。

無論何時我們用C#語言編寫一個程序,我們首先在類的名稱前指定關鍵字class,隨後,我們將源 代碼封閉在一對花括號內。示范如下:

a.cs

class zzz
{

}

讓我們引進稱為class的IL指令:

a.il

.assembly mukhi {}
.class zzz
{
      .method public hidebysig static void vijay()il managed
      {
            .entrypoint
            ldstr "hell"
            call void System.Console::WriteLine(class System.String)
            ret
      }
}

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