2

ここではaspx.csの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;
        }
    }
4

2 に答える 2

3

「using」ステートメントを使用している間は、インスタンスを破棄する必要はありません。ステートメントに提供されるオブジェクトは、finallyブロックでメソッドusingを呼び出すようにIDisposableインターフェイスを実装します。dispose()

上記の 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 に答える