Dispose方法是否在内部自动调用Finalize方法?

时间:2011-09-13 17:43:28

标签: .net asp.net

Dispose方法是否在内部自动调用Finalize方法?如果是的如何?

2 个答案:

答案 0 :(得分:2)

Dispose方法不会自动调用终结器。此外,终结器不会自动调用Dispose方法。

有关详细信息,请参阅此问题:

How does the IDisposable interface work?

答案 1 :(得分:2)

Dispose和Finalize是不同的东西。也没有调用另一个。

赔率是你的班级甚至不需要终结者。您应该构建一个终结器的唯一时间是构建一个类来处理一种全新的非托管资源。例如,如果您正在构建一个数据库访问类,它将利用Sql Server,MySql等现有的ADO.Net提供程序,那么需要终结器。您不应该构建终结器,因为已经为底层提供程序编写的终结器将负责清理。但是,如果您正在为一种全新的数据库构建ADO.Net提供程序,或者从头开始重新实现您的提供程序而不依赖于现有代码,那么您应该实现终结器。

所以,重复:

终结器仅适用于发起非托管资源的类型。它们只应该针对特定类型的资源实现一次,并且只能由框架本身调用。

Dispose用于包装其他暴露非托管资源的类型。它应该在每次实现时保存非托管资源,并调用创建的类的每个实例。

除了非托管代码所拥有的内存之外,它们都没有任何与内存有关的东西。