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

有一个主函数myMain(),这个函数中定义了一个类myData的对象myObj,对象中含有一些int,double,string等数据,我将myObj赋值给一个obje... 有一个主函数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对象,是吗??
展开
 我来答
iceser
2008-07-17 · TA获得超过2708个赞
知道大有可为答主
回答量:695
采纳率:100%
帮助的人:446万
展开全部
1、
.net 的所有对象,都是从object类继承而来的,也就是说,当然这个是由IDE自动完成的。也就是说,任何类型,都是object的派生类,所以,不需要像
object para = myObj; 这样的代码出现,
在需要 object 类型的参数时,直接使用 myObj 即可。因为派生类可以隐式转换为它的基类。

2、
object对象作为函数参数时,并不都是使用引用方式,那要看具体的object对象的原型是什么,也可以是值类型。比如当object为int, uint, byte, string, Guid 等类型时,是进行值拷贝的,并不只是传递一个引用。对于C#的对象变量,我更倾向于它是一个指针,虽然.net貌似在非安全代码时没有所谓的指针。但除了值类型之外,我想其它的类型实例,它们的特点更像指针。

3、
GC的问题。也就是所谓的对象释放问题。首先,GC不是实时回收的,也就是说,当一个对象应当被释放时,GC很有可能不是在第一时间释放它,出于工作效率等各方面考虑,GC一般是定期回收内存的,或者也可以手用调用GC的相关函数才显示回收。同时,GC在回收内存是,有一定的标准,在这个标准里面,作用域就显得不是那么重要了,就算一个对象超出了定义它的代码所在的使用域,但同时如果还有其它变量引用它的话,GC就会认为该对象还在使用,并不会释放和回收它的。GC内部应该使用了一种类似引用计数器的设计,如果对象引用计数器不为零,那就不会释放该对象,这点有点像COM。你看过COM的机制的话,应该就会明白了。
twzhuanwen
2008-07-17 · TA获得超过1300个赞
知道小有建树答主
回答量:580
采纳率:0%
帮助的人:0
展开全部
是同一个内存单元,但是不会在主先程执行完毕后消失。
因为C#不是c++.
c#中的任何变量(包含函数范围的局部变量)的生命期
都由运行时控制,而不是在函数,线程等等结束时被消灭
掉。运行时跟踪任何一个变量,发现子线程中的方法仍然
引用着该变量时,是不会消灭这个变量的。
楼主需要理解C#和c++在内存控制方面的巨大差别,一言
概之,C#中的变量属于应用程序域,而不属于进程,线程,方法,对象等等。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式