2012-07-12 136 views
2

这里我在aspx.cs中使用了dispose方法,但我不确定是否以正确的方式处理对象。我从网上浏览它,并在我的代码中使用它,请你说说对象是以正确格式处理的。这是使用Dispose方法的正确方法吗?

这是我在我的类文件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; 
     } 
    } 

回答

3

using声明自动调用Dispose在块的结束,所以你不应该把自己再次调用它。另外,一般来说,除非你持有一些外部资源(锁,文件句柄,套接字,数据库连接等)或非托管内存(并且我怀疑这是你的情况),你应该没有终结者或Dispose方法。垃圾收集器负责释放托管内存。

+0

处置方法被称为在块的结尾。谢谢你 – JavaH 2012-07-12 06:22:03

3

你不需要在使用处置情况下 “使用” 的声明。提供给using语句的对象实现了IDisposable接口,以便在finally块中调用dispose()方法。

你上面using (CausesField SignUpDetails = new CausesField())声明将等同于下面的代码:

CausesField SignUpDetails = new CausesField(); 
try 
{ 
//To do code here 
} 
finally 
{ 
    if(SignUpDetails!=null) 
    { 
     SignUpDetails.Dispose(); 
    } 
} 
+0

+1 - 校正;使用不实现IDSiposable,使用作品仅适用于那些实现IDisposable的对象:) – Habib 2012-07-12 06:04:09

+1

糟糕!!!更正.... – 2012-07-12 06:15:42

+0

@LolCoder谢谢 – JavaH 2012-07-12 06:23:38

相关问题