2012-08-11 30 views
1

當寫C#新增無參考持有者嗎?

Console.Write(new Class().Work)

是「新class`仍然會產生一個參考?

堆棧上的值是多少? (地址)

+1

是的,當你調用新的ClassName()時,即使你沒有把它分配給任何東西,它也會返回一個引用,即使它以某種方式優化它而不實際返回引用,工作仍然可以訪問本地成員,或要求參考信息 – 2012-08-11 18:17:11

+0

「堆棧中的值」是一個實現細節。 IOW你不需要知道這一點。如果你真的想知道在封面下發生了什麼,請檢查IL。 – 2012-08-11 18:19:34

回答

1

即:newobj,callvirt,呼叫

是,創建一個對象 - 基準是在堆棧上,並且由callvirt消耗(剩下的呼叫的方法的返回值)

不需要變量,雖然它與一個合法。

1

當然它會生成一個參考,一個Class的實例必須存在才能調用Work就可以了。只是沒有一個變量來持有它。

不確定你對堆棧的意思。

+0

該堆棧包含地址值 – 2012-08-11 18:20:17

+0

@RoyiNamir對不起,我不確定我明白你的意思。 – kprobst 2012-08-11 18:27:23

1

這將是參考。你的問題中的新課程。該值將在堆棧地址處指向該類的HEX值。因此,在.NET中,如果通過引用引用地址,則地址將存儲在堆棧中,以便當您要訪問它時,編譯器會找出哪個HEX值,然後從中獲取適當的對象(類,函數,任何東西)堆。

+0

說這是一個「十六進制」值是誤導 - 數字只是一個整數。十六進制只是爲開發人員顯示地址的便捷方式 - 部分原因是因爲它們便於打破打字和閱讀的界限。計算機不會像「十六進制」那樣思考 – 2012-08-11 18:52:38