2

コード分​​析の警告を生成するいくつかのレガシー コードでこれを見てきました。

  Database db = DatabaseFactory.CreateDatabase(strDBCon);
  DbCommand dbCommand = db.GetSqlStringCommand(sb.ToString());

  using (IDataReader dataReader = db.ExecuteReader(dbCommand))
  {
     while (dataReader.Read())
     {
     }
     dataReader.Close();  // <-- this is redundant as close is covered by using's implicit dispose
  }
  dbCommand.Connection.Close();
  dbCommand.Dispose();
  db = null;

ここで、dbCommand を破棄するだけでなく、dbCommand.Connection プロパティを閉じる必要があることを SO で読みました。私は、dbCommand が子の使い捨てオブジェクト (この場合は Connection. そうでない場合、なぜですか?

4

1 に答える 1

3

この点で、型には、ものの所有権を取得するか、単に利用するかの選択肢があります。あなたの場合、特にこれは、作成した既存のインスタンスを渡すだけで、再度使用することが期待できます。

渡された型のインスタンスを使用して型が明示的に構築された場合、その型がそのインスタンスの所有権を取得し、それを破棄パターンの一部として管理することが期待される場合がありますが、一時的なメソッド呼び出しの場合はそうではありません。

于 2013-05-01T10:16:42.553 に答える