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

急急急! c# 对象生命周期问题

急急急! c# 对象生命周期问题

小怪兽爱吃肉 2018-12-06 11:22:23
void Method() {           MyClass x = new  MyClass(); } MyClass是我自己定义的类,我在此实例化了一个对象,指针存x,实际的对象在堆内,当我在其他地方想再访问这个对象时怎么访问   因为   出了Method函数  那么指针x应该就被释放了,还有那么实际的对象  是什么时候会被回收。如何接着访问那个对象,多谢谢 急急急!
查看完整描述

10 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

问题的关键是方法是在线程栈中执行的,而你的对象指针并没有通过线程栈传递到另一个方法中,你创建的对象即使CLR还没有进行回收,也就是说还在内存中,但是你的代码并不知道对象的地址是什么,对吗?

所以要解决有两个办法:一参数传递给另一个方法,二 用一个静态的字段持有住你对象的引用..比如一个类中定义一个静态的集合字段,你的对象添加进去.因为静态字段属于类型,而类型的地址在CLR看来是加载了类型后,就不会改变的,除非AppDomain被卸载.

查看完整回答
反对 回复 2019-01-21
?
萧十郎

TA贡献1815条经验 获得超13个赞

出了作用域是访问不了的,不管还有没有被回收

是要重用吗?可以用单例模式创建

查看完整回答
反对 回复 2019-01-21
?
森林海

TA贡献2011条经验 获得超2个赞

@K4:

如果要在多处使用可以考虑用全局变量或传递参数

查看完整回答
反对 回复 2019-01-21
?
达令说

TA贡献1821条经验 获得超6个赞

哦,多谢您。可是我  生成的对象是当我点击按钮是动态生成的,不能提前定义啊。而且是每点击一次都生成一个对象的。

怎么办?

查看完整回答
反对 回复 2019-01-21
?
皈依舞

TA贡献1851条经验 获得超3个赞

@K4:

不太清楚你的真实需求是什么,如果确定要产生多个对象可以在创建对象后放在一个泛型列表中。

查看完整回答
反对 回复 2019-01-21
  • 10 回答
  • 0 关注
  • 410 浏览

添加回答

举报

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