是否可以在C#中强制使用using语句

时间:2009-04-15 10:07:42

标签: c# using

真的希望能够使用某种类型的属性来装饰我的类,这将强制使用using语句,以便始终安全地处理类并避免内存泄漏。有人知道这种技术吗?

3 个答案:

答案 0 :(得分:13)

嗯,有一种方法可以做到这一点 - 只允许通过一个带委托的静态方法访问你的对象。作为一个非常简单的例子(显然有许多不同的打开文件的方式 - 读/写等):

public static void WorkWithFile(string filename, Action<FileStream> action)
{
    using (FileStream stream = File.OpenRead(filename))
    {
        action(stream);
    }
}

如果能够创建一次性对象实例的唯一内容是您自己的类中的方法,则可以确保它们得到适当的使用。不可否认,没有什么可以阻止代表获取参考文件的副本并稍后尝试使用它,但这不是完全相同的问题。

这种技术严重限制了你可以用你的对象做什么 - 当然 - 但在某些情况下它可能有用。

答案 1 :(得分:3)

您可以使用FxCop来强制执行此规则。请参阅Wikipedia了解quick overview

答案 2 :(得分:0)

如果您想确保始终处置您的对象,请将终结器与IDisposable结合使用。

但在你这样做之前,请阅读IDisposable和终结者,并意识到你通常不需要它们,除非你的班级正在做一些事情,比如管理非托管资源的生命周期。

使用终结器,您的对象将被“最终”回收,无论是否包含在使用中。 using语句是IDisposable的一种便利,它允许进行确定性清理。唯一需要注意的是,使用终结器的对象清理起来会更加昂贵,并且在等待最终确定时通常会在内存中停留更长时间。

参考When do I need to implement a finalizer or IDisposable? 要么 technorabble: Using Dispose, Finalizers and IDisposable