2012-07-12 177 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

相關問題