请高手回答一个用object作为函数参数的问题??

有一个主函数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对象,是吗??

守着一只汪
浏览 371回答 2
2回答

慕盖茨4494581

是同一个内存单元,但是不会在主先程执行完毕后消失。因为C#不是c++.c#中的任何变量(包含函数范围的局部变量)的生命期都由运行时控制,而不是在函数,线程等等结束时被消灭掉。运行时跟踪任何一个变量,发现子线程中的方法仍然引用着该变量时,是不会消灭这个变量的。楼主需要理解C#和c++在内存控制方面的巨大差别,一言概之,C#中的变量属于应用程序域,而不属于进程,线程,方法,对象等等。
打开App,查看更多内容
随时随地看视频慕课网APP