发生回发时如何在类上实现Dispose方法

时间:2015-02-03 15:30:55

标签: c# asp.net garbage-collection postback dispose

我有一个继承自System.Web.UI.Page的类的类。通常它看起来像这样:

public class ToolPage : System.Web.UI.Page
public partial class EmailAnswer : ToolPage

此EmailAnswer类包含一些自定义对象,例如:

private EmailTemplate _emailTemplate
{
    get
    {
        return (EmailTemplate)ViewState["_emailTemplate"];
    }
    set
    {
        ViewState["_emailTemplate"] = value;
    }
}

这个对象实现了IDisposable,所以我在EmailAnsewr类中添加了这样的代码:

public sealed override void Dispose()
{
    Dispose(true);
    GC.SuppressFinalize(this);
}

protected virtual void Dispose(bool disposing)
{
    if (disposing)
    {
        if (_emailTemplate != null)
            _emailTemplate.Dispose();
    }
    if (_groupsEmailTargets!= null)
        _groupsEmailTargets= null;
    if (_emailAttachments != null)
        _emailAttachments = null;
}

此object_emailTemplate仅在第一个Page_load事件上加载到ViewState,稍后当我提交表单时使用_emailTemplate。现在在第一篇文章回来我失去了这个对象,因为调用了Dispose。

那么应该如何实现这种处理?

0 个答案:

没有答案