トップページ
ひらく | たたむ | ページトップ
↓マウスで反転選択した文字を検索
C#
   
ページ内検索 ページ外検索
検索したい文字を入力して
ENTERを押すと移動します。
\n
[ トップページ ]
[ ____CommandPrompt ] [ ____JScript ] [ ____MySQL ] [ ____Cygwin ] [ ____Java ] [ ____Emacs ] [ ____Make ] [ ____Perl ] [ ____Python ] [ ____OpenGL ] [ ____C# ] [ ____StyleSheet ] [ ____C++ ] [ ____Winsock ] [ ____Thread ] [ ____VisualStudio ] [ ____C ] [ ____Win32API ] [ ____Lua ] [ ____PhotoShop ]
ヘッダ検索
___

■ Dispose



  
  POINT
    using を利用して Dispose を自動で呼べる。

  DESC
    C#では、オブジェクトが使われなくなったときにするべき処理は
    Dispose() に実装するのが一般的。

    IDisposable インタフェースが Dispose() メソッドを持っています。
    Dispose() を実装するクラスは、IDisposable を継承すること。
    C# では何らかの終了処理が必要な場合は、以下のようにする必要がある。

    class MyClass : IDisposable {
      public MyClass() {
      }
      public void Dispose() {
        // 終了処理
      }
    }

    Dispose() の呼び出し例

    public void AnyMethod() {
      MyClass obj = new MyClass();
      obj.DoSomething1();
      obj.DoSomething2();
      obj.Dispose();
    }
* クラスの設計者は、IDisposableを継承して Dispose() で終了処理を実装 * クラスの使用者は、クラスのオブジェクトを使用しなくなったら Dispose() を[ 明示的 ]に呼ぶ IDisposable を継承せずに Dispose() を実装しても良い? 望ましくありません。 スコープを抜けたときに Dispose() を自動で呼び出してくれる using が機能しなくなります。 using を積極的に使うことで Dispose() 忘れを防ぐことができるので、 IDisposableを継承してDispose()を実装すべき。 C++に馴染んできた人は、 C++のようにデストラクタがスコープ抜けたら自動で呼ばれる方がいいと思う。 ただそれはオブジェクトがローカル変数の場合。 void AnyMethod() { MyClass obj(); obj.DoSomething1(); obj.DoSomething2(); } これは AnyMethod() を抜けたら自動で obj のデストラクタは呼ばれます。 void AnyMethod() { MyClass* obj = new MyClass(); obj->DoSomething1(); obj->DoSomething2(); delete obj; } このように new を使ってオブジェクトを生成したら、 C#のDispose()同様にdeleteを最後に呼ぶ必要があります。 POINT C#の場合、クラスからオブジェクトの生成をする場合は、常にnewを使う。 ただし delete は呼ぶ必要はない。 deleteに相当する処理はGCが適当なタイミングでやってくれるから。 POINT C#で Dispose() を呼ばなければならないケースより、 C++で delete を呼び出さなければならないケースの方が多いはず。 また C# には、usingを使って Dispose() 自動呼び出しもできる。 C++より解放忘れのリスクは少ない。
















NINJAIDX 10