有一個主函數myMain(),這個函數中定義了一個類myData的對象myObj,對象中含有一些int,double,string等數據,我將myObj賦值給一個object對象para,然后將para作為參數傳給了新線程TestThread調用的方法newMethod,語句如下:object para=myObj;Thread TestThread = new Thread(new ParameterizedThreadStart(newMethod) );TestThread.Start(para);然后我在newMethod函數中,將para還原成類myData的對象:myData d=(myData)para;這樣,主函數myMain()中myObj的數值就被傳遞到子函數newMethod中了。我看到書上說object對象作為函數參數是以引用的方式!那么,newMethod函數使用的d是不是和主函數myMain()中的myObj對象是同一個內存單元??如果我在執行子進程的時候,主進程執行完畢,釋放了myObj對象,那么子進程中的d對象豈不是消失了??這還了得??iceser,您的意思是:如果我在執行子進程的時候,主進程執行完畢,釋放了myObj對象,那么子進程中的d對象不會消失的,可以繼續使用d對象,是嗎??
2 回答

慕蓋茨4494581
TA貢獻1850條經驗 獲得超11個贊
是同一個內存單元,但是不會在主先程執行完畢后消失。
因為C#不是c++.
c#中的任何變量(包含函數范圍的局部變量)的生命期
都由運行時控制,而不是在函數,線程等等結束時被消滅
掉。運行時跟蹤任何一個變量,發現子線程中的方法仍然
引用著該變量時,是不會消滅這個變量的。
樓主需要理解C#和c++在內存控制方面的巨大差別,一言
概之,C#中的變量屬于應用程序域,而不屬于進程,線程,方法,對象等等。
- 2 回答
- 0 關注
- 474 瀏覽
添加回答
舉報
0/150
提交
取消