- 締切済み
C#のusing文でメソッドの戻り値にオブジェクト
C#4.0を使用しています。 例えば、次のようなメンバやメソッドの戻り値がオブジェクトを返す場合に、 usingの()の中で記述した時に確実にリソースを解放してくれるのでしょうか? そもそもこのような使い方(メソッドがオブジェクトを返す)をして良いのでしょうか? public class SQLiteAdapter { public DbConnection Connection { get { return new SQLiteConnection("Data Source=test.db"); } } } adapter = new SQLiteAdapter(); using (DbConnection conn = adapter.Connection) { } なぜこのようなことをやりたいと思ったかというと、 SQLiteやMySqlの共通のラッパークラスのようなものを作りたいと思いました。 ただほとんどの処理の構造は同じなので、 違う部分だけをメソッドの戻り値で済ましたいと思いました。 例えばDbConnectionの場合、 SQLiteならSQLiteConnection MySqlならMySqlConnection 例えばクエリを実行する処理では public Boolean ExecuteNonQuery(string sql) { SQLiteTransaction tx = null; using (SQLiteConnection conn = new SQLiteConnection(this.connectionString)) using (SQLiteCommand cmd = conn.CreateCommand()) { try { conn.Open(); //トランザクション開始 tx = conn.BeginTransaction(); cmd.CommandText = sql; cmd.Transaction = tx; //SQL実行 cmd.ExecuteNonQuery(); //コミット tx.Commit(); return true; } catch (Exception ex) { //ロールバック if (tx != null) tx.Rollback(); return false; } finally { } } } SQLiteTransaction、SQLiteCommand、SQLiteConnection の3箇所をMySqlなら MySqlTransaction、MySqlCommand、MySqlConnection に変更すればいいわけですよね? なのでそれぞれのアダプター側でこのように同じような処理を書かずに 基本クラス側で処理を記述し、各派生クラス側ではリソース(オブジェクト)を返すメソッド を用意すればいいのかな?と思いました。 ただ質問のようなusing文の使い方で大丈夫なのか疑問に思って質問しました。 よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- Tacosan
- ベストアンサー率23% (3656/15482)
「メソッドがオブジェクトを返す」だけなら, 自分で答えを書いてるよ. using (SQLiteCommand cmd = conn.CreateCommand()) の「conn.CreateCommand()」って, 何?