熟悉C#资源回收的朋友来看一个问题:这个IDispose该如何写?

public class Student:IDispose
{
public int ID{get;set;}
public string Name{get;set;}

public void Dispose()
{
??????
}
}

自己写过资源回收的朋友请问一下,这个里面我到底应该写什么?如果我自己真的要用using来释放我自己写的类所申请的资源的话。

第1个回答  2012-07-11
你这个类中只有托管资源,比如int和string,并没有非托管资源,所以不必实现IDispose。
如果类中有非托管资源,请参考以下文章来写Dispose方法。

参考资料:http://blog.csdn.net/puddingpudding/article/details/4025562

第2个回答  2012-07-12
bool isDispose=false;
public void Dispose()
{
if(!isDispose)
{
isDispose=true;
//销毁非托管资源
GC.SuspressFinalized(this);//单词有错的话,用Ctrl+J改正。
}
}本回答被提问者和网友采纳

c# 中USING的具体用法
一个很简单的方法:查看该类是否有Dispose方法,即该类是否实现了IDispose接口。这个只是其中一个方法,并不是百分百正确。还有其他一些类引用了非托管资源,他们虽没有实现IDispose接口,但他们仍然有释放非托管资源的需求。那现在要了解的问题就是如何释放非托管资源?最直接的方法就是调用Dispose方法即可...

C#中对象的销毁有三种方式Finalize,Dispose,GC。请大虾们描述三种方式...
1、由于大多数的非托管资源都要求可以手动释放,所以,我们应该专门为释放非托管资源公开一个方法。实现IDispose接口的Dispose方法是最好的模型,因为C#支持using语句快,可以在离开语句块时自动调用Dispose方法。 2、虽然可以手动释放非托管资源,我们仍然要在析构函数中释放非托管资源,这样才是安全的应用程序。否则如果因为...

C#中回收垃圾是那种方式回收的,是程序结束才会回收,还是方法结束后会回...
于是C#就又造了一种接口IDispose,要求你在它的dispose方法中实现对资源的释放来配合析构函数做一些资源释放操作,甚至当你想及时清理的时候只能你自己代码主动调用dispose,当然C#又加了个using语法糖来在帮你引用出作用域时自动调用dispose。。。

在c#中怎样即时删除一个类的实例
一般来说不需要手动去删除。C#提供了垃圾回收机制,也就是说系统会自动帮你处理掉不用的实例。如果特殊情况需要手动删除某个类的实例,可以让该类继承IDispose接口,在删除的时候调用Dispose()方法去销毁该实例。

C# using的问题。
你这就是 Using有几种用法的问题哦,我来说说我的理解 它有三种用法,1、比较常用的就是像LZ说的 引入命名空间 2、也比较常用,就是LZ提到的那个。它其实就定义一个范围,在范围结束时处理对象。在一般操作数据库中使用到 比如:using(SqlConnection conn= new Sqlconnection(connstring)){}这里它就...

C# new后,怎样立即释放资源,不等待系统自动回收,要手动释放
将该对象= null,然后GC.Collect。不过非常不推荐这样做。如果该对象有非托管资源的话,得自己继承IDispose接口了。释放就直接调用即可。

C#.net如何手动释放内存资源
1、 Finalize只释放非托管资源;2、 Dispose释放托管和非托管资源;3、 重复调用Finalize和Dispose是没有问题的;4、 Finalize和Dispose共享相同的资源释放策略,因此他们之间也是没有冲突的。在C#中,这个模式需要显式地实现,其中C#的~Foo()函数代表了Finalize()。而在C++\/CLI中,这个模式是自动实现的,C++的类析构函数...

C# using 的问题
你这就是 Using有几种用法的问题哦,我来说说我的理解 它有三种用法,1、比较常用的就是像LZ说的 引入命名空间 2、也比较常用,就是LZ提到的那个。它其实就定义一个范围,在范围结束时处理对象。在一般操作数据库中使用到 比如: using(SqlConnection conn= new Sqlconnection(connstring)){}这里它...

相似回答