タイトル : Re^4: form_load 投稿日 : 2007/07/31(Tue) 14:42 投稿者 : 魔界の仮面弁士
> using ステートメントを使うとdisposeメソッドを省略できるとのことですが そうです。(Dispose とは、「処分する」という意味です) より正確にいえば、「IDisposable インターフェイスの Dispose メソッド」が 自動的に呼び出されるようになるということです。 Using ステートメントを使うと、処理中にエラーが発生したとしても、 必ず Dispose が呼び出される仕掛けになっているため、単に Dispose を呼ぶよりも、 エラーに強い安全なコードとなります。 > ちなみにusing を使わず disposeもしないとどんな不都合があるのでしょうか。。 "不都合"の内容はクラスによって異なりますが、たとえば「メモリ不足エラーが発生」 「処理速度が低下する」「オブジェクトの作成処理が失敗する」などが発生します。 たとえば、『電話回線』や『データベース接続』を開く場合を想像してみてください。 通信要求があれば、接続を開く必要があります。 しかし接続を開いたあと、もし通信終了後も、回線を切断せずに放置しておいたとしたら、 接続数ばかりが増えてしまい、いずれ回線がパンクしてしまうでしょう。 OS の資源の場合にも、同じことがいえます。 IDisposable を実装したクラスでは、原則として、作成したオブジェクトを、 作成者自身が破棄しなければならないのです。 # IDisposable なクラスの具体例としては、たとえば Graphics, Font, Pen, Brush などの # 描画系クラス、MemoryStream, FileStream などのメモリ/ファイル操作用の # ストリーム系クラス、OleDbConnection, SqlConnection などのDB接続系クラスなどです。 ただし、他の人が作ったオブジェクトや、他の場所でも使われるオブジェクトは、 勝手に破棄してはいけません。それらをうっかり破棄してしまうと、他の場所で 破棄済みのオブジェクトが使われる時に、エラーとなってしまうでしょう。 たとえば、.CreateGraphics() などで『作成』した Graphics は、自身で Dipose しなければいけませんが、Paint イベントの引数などから『取得』した Graphics などは、 .NET 側によって処理されますので、勝手に Dispose してはいけません。 |