Есть ли способ определить, вызвал ли объект 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?