2

在这里,我使用了 aspx.cs 中的 dispose 方法,但我不确定处理对象的方式是否以正确的方式完成。Obvisoly我从网上冲浪并在我的代码中使用它,你能说无论对象是否以正确的格式处理。

这是我在 aspx.cs 中的方法

public List<CausesField> list(DataTable dt)
        {
             List<CausesField> lst = new List<CausesField>();
            foreach (DataRow row in dt.Rows)
            {

                    using (CausesField SignUpDetails = new CausesField())
                    {
                        SignUpDetails.FirstName = row["FirstName"].ToString();
                        SignUpDetails.LastName = row["LastName"].ToString();
                        SignUpDetails.Birthdate = row["BirthDay"].ToString();
                        SignUpDetails.Gender = row["Gender"].ToString();

                        lst.Add(SignUpDetails);
                        SignUpDetails.Dispose();
                    }


            }
            return lst;

        }

我的班级文件:

public  class CausesField:IDisposable
    {

        public string FirstName { get; set; }  public string LastName { get; set; }

        public string Birthdate { get; set; }  public string Gender { get; set; }

         private Component component = new Component();

        private bool disposed = false;

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

        private void Dispose(bool disposing)
        {
            // Check to see if Dispose has already been called.
            if (!this.disposed)
            {
                // If disposing equals true, dispose all managed 
                // and unmanaged resources.
                if (disposing)
                {
                    // Dispose managed resources.
                    component.Dispose();
                }

            }
            disposed = true;
        }
    }
4

2 回答 2

3

使用“using”语句时不需要处理实例。提供给using语句的对象实现了 IDisposable 接口,以便dispose()在 finally 块中调用方法。

您的上述 using (CausesField SignUpDetails = new CausesField())语句将等效于以下代码:

CausesField SignUpDetails = new CausesField();
try
{
//To do code here
}
finally
{
    if(SignUpDetails!=null)
    {
       SignUpDetails.Dispose();
    }
}
于 2012-07-12T06:00:03.173 回答
3

using语句Dispose在块的末尾自动调用,所以你不应该再自己调用它。

此外,一般来说,除非你持有一些外部资源(锁、文件句柄、套接字、数据库连接等)或非托管内存(我怀疑你的情况就是这种情况),否则你不应该有终结器或Dispose方法。垃圾收集器负责释放托管内存。

于 2012-07-12T06:00:11.393 回答