ReSharper 2026.1 Help

デコレータを作成する

デコレータデザインパターンは、オブジェクトに追加の振る舞いを動的に追加するために使用されます。 さらに、インターフェースを使用することによって、デコレータを使用して、複数の継承と同様に型を統一することができます。

例として、デコレーターに入れたいオブジェクト BirdLizard があるとします:

class Bird { public void Fly() { ... } } class Lizard { public void Walk() { ... } }

1。 抽出インターフェースを使用してオブジェクトインターフェースを取得するリファクタリング

デコレータはこれらの両方のクラスから継承できないため、これらのオブジェクトの両方に対して リファクタリングする メニュー Control+Shift+R から インターフェースの抽出リファクタリング を呼び出して、インターフェースを取得できます。

ReSharper でデコレータを作成する

このリファクタリングを呼び出すと、インターフェースに表示するメンバーを確認するウィンドウが表示されます。

ReSharper でデコレータを作成する

両方のクラスでこれを行った後、次のコードが完成します:

internal interface IBird { void Fly(); } class Bird : IBird { public void Fly() { ... } } internal interface ILizard { void Walk(); } class Lizard : ILizard { public void Walk() { ... } }

2。 デコレータクラスを宣言する

これらのインターフェースを使用して、デコレータを作成することができます。 まず、 Dragon というクラスを宣言し、 IBirdILizard の両方を実装していることを示します。

class Dragon : IBird, ILizard { ... }

集計されたメンバーの場合。 最も簡単な方法は、これらの両方を最初にフィールドとして宣言することです。

class Dragon : IBird, ILizard { private Bird bird; private Lizard lizard; }

3。 未使用のフィールドを初期化するにはクイックフィックスを使用する

今度は、未使用のフィールドに クイックフィックスを適用して、両方をコンストラクターパラメーターから初期化することができます:

ReSharper でデコレータを作成する

その後、私たちのクラスは次のようになります:

class Dragon : IBird, ILizard { private Bird bird; private Lizard lizard; public Dragon(Bird bird, Lizard lizard) { this.bird = bird; this.lizard = lizard; } }

4。 ソースオブジェクトの委譲メンバーを生成する

最後の仕上げとして、bird と lizard の両方の委譲メンバーを生成する必要があります。 これは簡単です — 生成メニュー Alt+Insert を開き、 委譲メンバー を選択します:

ReSharper でデコレータを作成する

ReSharper は次に、どのメンバーを委譲する必要があるかを質問します。

ReSharper でデコレータを作成する

そして、ここに最終結果があります:

class Dragon : IBird, ILizard { public void Fly() { bird.Fly(); } public void Walk() { lizard.Walk(); } private Bird bird; private Lizard lizard; public Dragon(Bird bird, Lizard lizard) { this.bird = bird; this.lizard = lizard; } }

以上です ! 私たちのデコレータは準備ができています。

2026 年 6 月 12 日