ReSharper 2024.3 ヘルプ

Dispose パターンを生成する

ReSharper を使用すると、クラスが所有するリソースの種類に応じて、IDisposable のさまざまな実装を自動的に生成できます。

  • クラスが管理対象 IDisposable リソースのみを所有している場合は、ReSharper を使用するとパラメーターなしで public void Dispose() の単純な実装を生成できます。Dispose() は、選択した Dispose 可能なメンバーに対して呼び出されます。

  • クラスがアンマネージリソースのみを所有している場合、ReSharper はデストラクタと ReleaseUnmanagedResources メソッドを追加で生成し、そこでクリーンアップコードを書くことができます。

  • クラスが管理リソースとアンマネージリソースの両方を所有しているか(継承を介して)所有している場合、ReSharper はさらに継承によってオーバーライドされる Dispose(bool disposing) メソッドを作成します。

使い捨てパターンの実装方法を構成するには、生成ダイアログのオプションを使用します。

以下の例では、このコマンドを使用して、管理された logger および resource フィールドの使い捨てパターンを生成し、これらのフィールドの null チェックを生成する単一のオプションを使用しています。

生成前

生成後

class MyClass { private Logger logger; private IDisposable resource; }
class MyClass : IDisposable { private Logger logger; private IDisposable resource; public void Dispose() { logger?.Dispose(); resource?.Dispose(); } }

Dispose パターンを生成する

  1. エディターで、型名または型内の破棄パターンを挿入する行にキャレットを置きます。キャレットが型名上にある場合、生成されたコードは型宣言の先頭に追加されます。

  2. Alt+Insert を押すか、メインメニューから ReSharper | 編集 | コードの生成…を選択します。あるいは、Control+Shift+A を押して、ポップアップでコマンド名を入力して、そこで選択することもできます。

  3. 生成ポップアップで、Dispose パターンを選択します。

  4. 表示される生成ダイアログに、IDisposable に割り当て可能なタイプのプライベートプロパティとフィールドのリストが表示されます。これらの型メンバーの一部または全部を選択すると、ReSharper は現在の型にラッパーを生成し、選択した型メンバーに実行を委譲します。

    Generating a dispose pattern with ReSharper

    必要に応じて、ダイアログで次のコントロールを使用します。

    • フィールドは null 可能 — タイプに null 許容フィールドまたはプロパティがある場合に表示されます。デフォルトでは、このチェックボックスが選択されています。これは、ReSharper が選択されたフィールドに対して null チェックを生成することを意味します。null チェックが必要ない場合は、このチェックボックスをオフにすることができます。

    • 管理されていないリソースを持っている — このチェックボックスを選択すると、ReSharper は、クリーンアップコードを記述できるデストラクタと ReleaseUnmanagedResources メソッドを追加で生成します。

    • このクラスから継承する予定です — このチェックボックスが選択されている場合、ReSharper は、継承によってオーバーライドされる可能性のある Dispose(bool disposing) メソッドを追加で作成します。

    • Dispose がすでに存在するDispose() の実装がすでに存在する場合に表示され、次のいずれかを選択できます。

      • メソッドがすでに存在する場合は置換します。

      • 新しく生成されたメソッドを既存のメソッドと並べて置きます。

      • 新しいメソッドの生成をすべてスキップします。

    • デストラクタはすでに存在します管理されていないリソースを持っているオプションを選択し、クラスにすでにデストラクタがある場合に表示されます。このセレクターを使用して、次のいずれかを選択します。

      • メソッドがすでに存在する場合は置換します。

      • 新しく生成されたメソッドを既存のメソッドと並べて置きます。

      • 新しいメソッドの生成をすべてスキップします。

  5. 完了をクリックしてウィザードを完了します。

    オプションをクリックして、ReSharper オプションのコード編集 | メンバーの生成ページで一般的なコード生成設定を確認または変更することもできます。

IDisposable が実装されていない場合、このアクションはクイックフィックスとしても利用できます。

A quick-fix that helps generate dispose pattern

この機能は、次の言語とテクノロジーでサポートされています。

ここで説明する手順と例では、C# の機能の使用について説明します。他の言語の詳細については、言語およびフレームワークセクションの対応するトピックを参照してください。

関連ページ:

コードの問題のクイックフィックス

ReSharper を使用すると、設計時に検出されたほとんどのコード問題を即座に修復できます。ハイライトされたコードの問題でを押して、問題を解決したり最適以下のコードを改善したりするための適切な方法を選択するのと同じくらい簡単です。クイックフィックスの適用:クイックフィックスは、ハイライトされたコードの問題の左側にアクションインジケーターとして視覚的に表示されます。これらのインジケーターは、コードの問題にキャレットを置くと表示されます。次のインジケーターは、簡単な修正を意味します。エラー重大

ASP.NET MVC 特有の機能

ReSharper には、一般的な ASP.NET 機能に加えて、ASP.NET MVC での作業をより簡単にサポートする特殊機能があります。構文のハイライト:ASP.NET MVC メソッド呼び出しとパラメーターの特別な構文のハイライト: コード補完:文字列リテラルでアクションとコントローラーを参照するための専用コード補完: ナビゲーションと検索:さまざまなナビゲーション機能がアクションとコントローラーでも機能します。コード生成:使用箇所から新しいコントローラーとアクションを作成する: 最終...

言語による ReSharper: MSBuild

MSBuild は、アプリケーションを構築するために広く使用されているプラットフォームです。特定の XML タグを使用して、プロジェクトの構築方法や実行方法を定義できます。ReSharper を使用すると、より速く行うことができます。コード検査:あらかじめ定義された要素またはその属性の名前を誤って入力した場合、ReSharper はそのような不一致についてハイライト表示します。まだ定義されていないプロパティを参照しようとすると、ReSharper はそのようなケースも検出します。MSBuild...

言語による ReSharper: Google プロトコルバッファ (Protobuf)

ReSharper オプションのページで Protobuf サポートが明示的に有効になっている場合、ReSharper は Google Protocol Buffers (Protobuf) バージョン 2.x および 3.0 の .proto ファイルでコード分析および支援機能を提供します。ReSharper は、.proto ファイルの言語構文をハイライトし、エラーを検出してハイライトします。基本コード補完と他のタイピング支援機能はエディターで利用可能です。型と値の宣言に行き、それらの使用箇所を...

言語 JSON による ReSharper

JSON および JSON スキーマのサポートは、現在、構文のハイライト(古い Visual Studio バージョンを含む)のような基本的なものから、コードのフォーマットや再配置(たとえば、オブジェクトのプロパティや任意の選択を移動できる)、コードインスペクションおよびクイックフィックスなどのより高度な機能にまでおよびます。スキーマ、パス、正規表現、パッケージを認識するコード補完も同様です。JSON 値ヘルパー:ReSharper では、JSON プロパティの一部を特定の値タイプ(正規表現、...

委譲メンバーを生成する

ReSharper を使用すると、プライベートフィールドとプロパティを介して使用可能なパブリックメンバー(メソッドとプロパティ)に実行を委譲するメンバーをすばやく生成できます。つまり、包含型のプライベートフィールドまたはプロパティのインターフェースの目的の部分を公開します。以下の例では、このコマンドを使用して、フィールドの委譲メンバーを生成します。class Point { public Point(int x, int y) { X = x; Y = y; } public int X { g...