有一个主函数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 关注
- 429 浏览
添加回答
举报
0/150
提交
取消