現在我們 將看到如何將參數傳遞到一個函數中。
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
}
}