你如何正确使用实现IDisposable的静态属性?

时间:2009-06-15 18:58:37

标签: .net static idisposable

举个例子:

using (Brushes.Black)
{
...
}

不是一个好主意,因为它是静态的。下次你的应用程序使用Brushes.Black时,你会遇到问题,因为它已被处理掉了。

现在,如果你只使用Brushes.Black,那么可以不处理它,因为你只留下一个非托管资源(希望!)。

但是,一般来说,你应该避免使用大量的静态IDisposable,还是有些东西我不知道?

2 个答案:

答案 0 :(得分:3)

通常只使用它们,让框架类担心处理它们。

它们就在那里,您可以在不创建和处理它们的情况下使用它们。每个人在第一次使用时都会创建,并缓存在哈希表中。框架类负责在应用程序关闭时正确处理它们。

确实没有那么多静态IDisposable可以让你担心它们。如果你要使用大量的画笔,你可能会用循环中的颜色创建它们(然后你当然要负责处理它们)。

答案 1 :(得分:2)

  

举个例子:

     

使用(Brushes.Black){...}

     

不是一个好主意,因为它是   静态的。下次你的应用程序进入   使用Brushes.Black,你会有的   问题,因为它一直存在   地布置。

它不仅仅是一个静态字段 - 该属性主动运行代码,以便在需要时创建新实例。只需查看相应的代码( Reflector ):

public static Brush Black
{
    get
    {
        Brush brush = (Brush) SafeNativeMethods.Gdip.ThreadData[BlackKey];
        if (brush == null)
        {
            brush = new SolidBrush(Color.Black);
            SafeNativeMethods.Gdip.ThreadData[BlackKey] = brush;
        }
        return brush;
    }
}