Disposableクラスコードスニペット

コード スニペット テクノロジを精査するに出てくる dispclassコードスニペットMSDNDispose メソッドの実装に合わせてちょっと直したもの。
ショートカットは「dispclass」。以下の部分を「dispclass.snippet」の名前で My Documents 下の「Visual Studio 2005\Code Snippets\Visual C#\My Code Snippets」フォルダに置けばOK。

<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippet Format="1.0.0">
  <Header>
    <Title>disposable class</Title>
    <Shortcut>dispclass</Shortcut>
    <Description>disposable class</Description>
    <SnippetTypes>
      <SnippetType>Expansion</SnippetType>
    </SnippetTypes>
  </Header>
  <Snippet>
    <Declarations>
      <Literal>
        <ID>classname</ID>
        <ToolTip>Class name</ToolTip>
        <Default>MyResourceWrapper</Default>
      </Literal>
    </Declarations>
    <Code Language="csharp" Format="CData">
    <![CDATA[public class $classname$ : IDisposable
    {
      private bool disposed;
      $end$

      public void Dispose()
      {
         Dispose(true);
         GC.SuppressFinalize(this);
      }

      protected virtual void Dispose(bool disposing)
      {
         if(!this.disposed)
         {
            if(disposing)
            {
              // 別の状態を解放します (マネージ オブジェクト)。
            }
            // 独自の状態を解放します (アンマネージ オブジェクト)。
            // 大きなフィールドを NULL に設定します。
         }
         this.disposed = true;
      }

      ~$classname$()
      {
         Dispose(false);
      }
    }]]>
    </Code>
  </Snippet>
</CodeSnippet>

Disposeは必ずこれでいいとは限らないけど、このパターンが基本なのでスニペットに用意しとくと便利。コメントはまま引用だけど、なんか微妙だ…。