为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

守着一只汪 2021-02-17 15:11:51
有一个主函数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#中的变量属于应用程序域,而不属于进程,线程,方法,对象等等。



查看完整回答
反对 回复 2021-03-18
  • 2 回答
  • 0 关注
  • 369 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信