如何显示释放自定义的类

zjh222 2009-11-06 09:08:52

//这里有个类,在另一个窗体中使用,用完这个类以后就想
//Dispose()释放,可不知怎么实现Dispose()才能释放这个
//经过New的类
public class Ctest : IDisposable
{
public int xr;
public string pab;
#region IDisposable 成员

void IDisposable.Dispose()
{
throw new NotImplementedException();
}

#endregion
void testMethod()
{
MessageBox.Show("ok");
}
}

public partial class Form1 : Form
{
Ctest cc = new Ctest();
public Form1()
{
InitializeComponent();
}

void a()
{
cc.pab = "rer";
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
//在这里想释放
cc.Dispose();
}

}



...全文
201 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qldsrx 2009-11-11
  • 打赏
  • 举报
回复
你的这个类不需要释放任何资源,继承IDisposable是完全没有必要的,这个类不用的时候,资源都会正常回收的。
mynameisboss 2009-11-11
  • 打赏
  • 举报
回复
.net的好处就是
你不用管~~
lianlian8 2009-11-11
  • 打赏
  • 举报
回复
学习一下!
lerit 2009-11-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sharpe 的回复:]
你给的例子是不用实现这个接口的。

自己实现这个接口是因为你类里面有非托管资料,比如:窗口句柄,打开的文件和流等。。。

当不再使用托管对象时,垃圾回收器会自动释放分配给该对象的内存。
[/Quote]
Dispose方法不只是负责释放一个对象非托管资源,还应该对任何它包含的可处置对象调用Dispose方法。与Finalize不同,Dispose方法与其他托管对象的通信时安全的,因为GC并不支持IDisposable接口,因此永远不会自动调用Dispose方法,显然,Dispose方法会在GC之前的某个手工调用时候发生,不会担心要处置的资源已经被回收而出错。但是这也有个弊端,就是实现了Dispose方法来释放非托管资源,但是如果使用时忘记手动调用,那么非托管资源可能永远存于内存当中。

sharpe 2009-11-08
  • 打赏
  • 举报
回复
不好意思打错字。

非托管资料
改成:
非托管资源


另:垃圾回收器不知道非托管资源的。。
sharpe 2009-11-08
  • 打赏
  • 举报
回复
你给的例子是不用实现这个接口的。

自己实现这个接口是因为你类里面有非托管资料,比如:窗口句柄,打开的文件和流等。。。

当不再使用托管对象时,垃圾回收器会自动释放分配给该对象的内存。
迈克揉索芙特 2009-11-08
  • 打赏
  • 举报
回复
同上,这个活cc替你干了。
lerit 2009-11-07
  • 打赏
  • 举报
回复
首先,你这个Ctest 的dispose其实什么都没做,反而是因为系统给你加的默认代码throw new NotImplementedException();你调用时候反而会抛出异常。这里你应该自己写释放非托管和托管的资源,然后下面调用才可以。你现在这样cc.Dispose();来手动调用是对的。
但是,实际上即使你实现了dispose方法,也是释放类中的资源,并没有释放对象本身哦。
最后,其实你关闭窗体后,cc这个对象就进入垃圾回收的准备阶段了,等待下一次垃圾回收,系统会自动回收这个对象的,你其实根本没必要自己手动释放。
http://blog.csdn.net/lerit/archive/2009/10/20/4704417.aspx可以参考一下7.6节
yanglinqiang 2009-11-06
  • 打赏
  • 举报
回复
在关闭这个窗体时已经自动释放了

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧