【问题标题】:Can Visual Studio warn me when I forget to dispose an IDisposable object?当我忘记处置 IDisposable 对象时,Visual Studio 可以警告我吗?
【发布时间】:2009-07-06 19:04:59
【问题描述】:

是否可以将 Visual Studio 2008 配置为在我忘记处置实现 IDisposable 的对象时向我发出警告?

【问题讨论】:

    标签: visual-studio-2008 idisposable compiler-warnings


    【解决方案1】:

    Visual Studio 本身没有此功能,但使用CodeRush,您可以在需要时使用块插入设计时警告和重构。

    【讨论】:

    • ReSharper 也会这样做。
    • CodeRush Xpress 甚至免费提供:devexpress.com/Products/Visual_Studio_Add-in/CodeRushX
    • FxCop 和 Genderme 也会这样做(都是免费的)
    • @JohnSaunders 你确定吗?我无法通过搜索“dispos”找到该选项。
    • @jeromej 这不是一个选项。这是快速修复之一。
    【解决方案2】:

    如果您打开 FxCop 设计规则,它会告诉您何时不实施 IDisposable 并且您有成员实施 IDisposable,如下所示:

    class Program
    {
        private DataTable NotDisposed;
    
        public Program()
        {
            NotDisposed = new DataTable();
        }
        static void Main()
        {
        }
    }
    

    【讨论】:

    • FxCop 非常适合这种东西。 '当然,如果你在使用(或实现 IDisposable)时犯了错误,Visual Studio 真的会警告你,但见鬼。
    【解决方案3】:

    我不认为它可以在编译时完成。

    但是,它可以在运行时完成。
    我创建了一个抽象类“Disposable”(它实现了 IDisposable,并实现了 Disposable 模式)。 在终结器中,我在调用终结器时发出 Assert,并且对象尚未被释放。

    我基于 Ian Griffiths 的一篇文章:

    http://www.interact-sw.co.uk/iangblog/2004/04/26/yetmoretimedlocking

    【讨论】:

    • 我反对使用基类来处理处置。由于 .NET 是单继承,这将您锁定在一个非常严格的继承链中,要求您的 DisposeBase 位于顶部。
    • 除了你可以使用“System.ComponentModel.Component”
    猜你喜欢
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多