Dispose パターンを生成する
JetBrains Rider は、クラスが所有するリソースの種類に応じて、さまざまな IDisposable の実装を自動生成するのに役立ちます:
クラスが管理された
IDisposableリソースのみを所有している場合、JetBrains Rider はパラメーターなしのpublic void Dispose()のシンプルな実装を生成するのに役立ちます。このとき、選択した破棄可能なメンバーにDispose()が呼び出されます。クラスがアンマネージリソースのみを所有している場合、JetBrains Rider はデストラクターと
ReleaseUnmanagedResourcesメソッドを追加で生成し、そこでクリーンアップコードを記述できます。クラスが管理リソースとアンマネージリソースの両方を所有しているか(継承によって)所有する可能性がある場合、JetBrains Rider は継承先でオーバーライド可能な
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 パターンを生成する
エディターで、型名または型内の破棄パターンを挿入する行にキャレットを置きます。 キャレットが型名上にある場合、生成されたコードは型宣言の先頭に追加されます。
Alt+Insert を押すか、メインメニューから を選択してください。 あるいは、 Ctrl+Shift+A を押して、ポップアップでコマンド名を入力して、そこで選択することもできます。
生成する ポップアップで、 Dispose パターン を選択します。
表示される 生成する ダイアログには、
IDisposableに割り当て可能な型のプライベートプロパティとフィールドの一覧が表示されます。 これらの型メンバーの一部またはすべてを選択すると、JetBrains Rider は現在の型に、選択した型メンバーに実行を委譲するラッパーを生成します。
必要に応じて、ダイアログで次のコントロールを使用します。
フィールドは null 可能 — 自分の型に nullable フィールドやプロパティがある場合に表示されます。 デフォルトでこのチェックボックスが選択されており、JetBrains Rider は選択されたフィールドに対して null チェックを生成します。 null チェックが不要な場合は、このチェックボックスをオフにできます。
管理されていないリソースを持っている — このチェックボックスを選択すると、JetBrains Rider はデストラクターと
ReleaseUnmanagedResourcesメソッドを追加で生成し、そこでクリーンアップコードを記述できます。このクラスから継承するプランがある — このチェックボックスを選択すると、JetBrains Rider は、継承先でオーバーライド可能な
Dispose(bool disposing)メソッドを追加作成します。Dispose がすでに存在する —
Dispose()の実装がすでに存在する場合に表示され、次のいずれかを選択できます。メソッドがすでに存在する場合は置換します。
新しく生成されたメソッドを既存のメソッドと並べて置きます。
新しいメソッドの生成をすべてスキップします。
デストラクタはすでに存在する — 管理されていないリソースを持っている オプションを選択し、クラスにすでにデストラクタがある場合に表示されます。 このセレクターを使用して、次のいずれかを選択します。
メソッドがすでに存在する場合は置換します。
新しく生成されたメソッドを既存のメソッドと並べて置きます。
新しいメソッドの生成をすべてスキップします。
OK をクリックしてウィザードを完了します。
IDisposable が実装されていない場合、このアクションは クイックフィックスとしても利用できます。
