1

我知道这不是标准做法,但是是否有任何缺点或更好的替代方法来执行以下操作?我只是想确保正确使用代码,而 .NET 不会为您做任何事情来确保它。

public class MyClass : IDisposable
        public void Dispose()
        {
            // Some managed shutdown logic...
            GC.SuppressFinalize(this);
        }

#if DEBUG
        // Why is ConditionalAttribute not allowed if you can still achieve this with compiler directives?
        // [Conditional("DEBUG")]
        ~SFtpClient()
        {
            Debug.Fail("This class is IDisposable and should be wrapped by using {}");
        }
#endif
}
4

2 回答 2

3

使用 FxCop 并注意CA2000: Dispose objects before lost scope

于 2011-06-09T22:31:34.050 回答
2

这对我来说看起来不错,因为该条件将防止在 RELEASE 构建中空终结器的不必要的终结成本。可能还想在 GC.SupressFinalize 周围添加#if DEBUG。

[Conditional("DEBUG")] 告诉编译器不要调用该方法,但该方法仍然存在。无论如何,您无法编译调用 Finalize() 方法。GC 终结器不检查属性。

于 2011-06-09T22:28:36.117 回答