有没有办法检测一个对象是否调用了 GC.SuppressFinalize?
我有一个看起来像这样的对象(为清楚起见,省略了完整的 Dispose 模式):
public class ResourceWrapper {
private readonly bool _ownsResource;
private readonly UnmanagedResource _resource;
public ResourceWrapper(UnmanagedResource resource, bool ownsResource) {
_resource = resource;
_ownsResource = ownsResource;
if (!ownsResource)
GC.SuppressFinalize(this);
}
~ResourceWrapper() {
if (_ownsResource)
// clean up the unmanaged resource
}
}
如果ownsResource
构造函数参数是false
,那么终结器将无事可做——因此GC.SuppressFinalize
从构造函数直接调用似乎是合理的(如果有点古怪)。然而,因为这种行为很古怪,我很想在 XML 文档注释中记录它……如果我想评论它,那么我应该为它编写一个单元测试。
但是,虽然System.GC具有设置对象可终结性的方法(SuppressFinalize、ReRegisterForFinalize),但我看不到任何获取对象可终结性的方法。有没有办法查询 GC.SuppressFinalize 是否已在给定实例上被调用,而不是购买 Typemock 或编写我自己的 CLR 主机?