アルゴリズムの複雑さを軽減し、モジュール性を高める
ちょうどすべての開発者は、クラス内の他のメソッドと絡み合っていた、実際には判読不能な単一のアルゴリズムで複雑なアルゴリズムを使用している状況にありました。 例: 方程式を解くための汎用クラスがあるとします。
上記の方程式ソルバーはハードコーディングされているため、別のソルバーに置き換えるには、すべてのインスタンスを手動で置き換える必要があります。 まずは、これを別のクラスに切り出しましょう。 これを行うには、 別の型に移動リファクタリング F6 を使います:

次に、メソッドを移動するクラスを指定する必要があります。 懸念をよりよく分離するために、 QuadraticEquationSolver という別のクラスを選択します。

メソッドを移動したので、判別式の計算も別に分けてみましょう。 これは簡単です ― 判別式の計算を選択し、 メソッドの抽出リファクタリング Control+Alt+M を実行します:

これで、新しいメソッドに名前を付けるだけです。

そしてそれは終わった:
ここで、しばらくしてから、2 次方程式のより安全なソルバーを見つけたとします。 プログラムに組み込むには、まず抽象基本クラス QuadraticEquationSolverBase を作成する必要があります。 リファクタリング メニュー Control+Shift+R で利用可能な 「スーパークラスの抽出」リファクタリング リファクタリングを使用します。

表示されるダイアログでは、どのメンバーが上に昇格されるかを選択します。 CalculateDiscriminant メソッドのみが必要です。

Calculate() メソッド(以前は Quadratic() と呼ばれていました)の抽象定義を追加し、次の基本クラスを補完します:
また、 QuadraticEquationSolverBase の実装はコード内のライフタイムマネージャーによって処理されることを前提に、 static キーワードを削除しました。 その結果、ReSharper は QuadraticEquationSolver クラスの名前が変更された Calculate メソッドに override キーワードを追加するよう通知します:

二次方程式ソルバーのより安全なバージョンを見つけたとしましょう。 実装しましょう。 まず、基底クラスで 派生型の作成 コンテキストアクション を使用します:
次に、このタイプのメンバーを実装するように求められます。
最後に、基本クラスの CalculateDiscriminant() メソッドを使用して実装を提供します。
そして終わった ! 現在、2 次方程式ソルバーは簡単に使用でき、その構成とインスタンス化は通常 IoC コンテナーによって処理されます。