CIL之 值型別與引用型別的宣告和使用

2021-08-02 01:31:05 字數 2236 閱讀 8156

在c#**中呼叫值型別的變數和呼叫引用型別的變數沒什麼區別,但是在cil**中就有不一樣了,下面讓我們看一下cil**是如何實現這一功能的吧!

namespace consoletest

company:", resume.timearea, resume.company);

int age = objperson.getage();

console.writeline("age:", age);

console.readkey();}}

public

class person

public

person(string name, int age, workexperience workexperience)

public workexperience getresume()

public

intgetage()

}public

class workexperience

public

string company

public

workexperience()

public

workexperience(string timearea,string company)

}}

.namespace consoletest

.method public

static

void

main(string args)

company:"

ldloc.1

//返回值為值型別時直接使用型別即可

call instance string consoletest.workexperience::get_timearea()

ldloc.1

call instance string consoletest.workexperience::get_company()

call void [mscorlib]system.console::writeline(string,object,object)

ldloc.0

call instance int32 consoletest.person::getage()

stloc.2

ldstr "age:"

ldloc.2

box int32

call void [mscorlib]system.console::writeline(string,object)

call valuetype [mscorlib]system.consolekeyinfo [mscorlib]system.console::readkey()

popret}}

.class public person

//值型別的引數直接使用型別即可

//引用型別的引數必須加class關鍵字且型別必須使用類的全稱

.method public

void .ctor(string name,int32 age,class consoletest.workexperience workexperience)

//返回值為引用型別時必須加class關鍵字且型別必須使用類的全稱

.method public

class consoletest.workexperience getresume()

//返回值為值型別時直接使用型別即可

.method public int32 getage()

}.class public workexperience

.method public

void .ctor(string timearea,string company)

.method public

string

get_company()

.method public

void

set_company(string val)

.method public

string

get_timearea()

.method public

void

set_timearea(string val)

.property instance string company()

.property instance string timearea()

}}

值型別與引用型別

直白點兒說 值型別就是現金,要用直接用 引用型別是存摺,要用還得先去銀行取現。麥機長 我覺得這話十分形象。宣告乙個值型別變數,編譯器會在棧上分配乙個空間,這個空間對應著該值型別變數,空間裡儲存的就是該變數的值。引用型別的例項分配在堆上,新建乙個引用型別例項,得到的變數值對應的是該例項的記憶體分配位址...

值型別與引用型別

工作許久了,可是對c 中的值型別和引用型別卻一直無法很好的理解。這兩天花了不少時間查詢資料,看文章,終於有所收穫,在此將自己理解整理出來,方便日後自己檢視,同時希望對跟我有一樣困惑的朋友有所幫助。廢話不多說,下面開始說說怎麼理解值型別和引用型別!值型別資料直接在他自身分配到的記憶體中儲存資料,而引用...

值型別與引用型別

自動變數型別是指儲存於該程式 程序 堆疊空間的一種變數型別 注意此時的堆疊空間並不是組合語言上的堆疊,只是它的使用及釋放類似於堆疊的過程 這個變數型別的乙個特點是它在程式執行時存在,在程式結束時消失。正是這個過程類似於彙編裡棧的操作,所以才將其命名 處理 為堆疊。我們平時所定義的int之類的型別都屬...