.Net 2.0新機能:リファクタリング(4)
<1>既存のフィールドから属性をすばやく作成し、新しい属性への参照を使用してコードをシームレスに更新できます.<2>フィールドがpublic(C#リファレンス)の場合、他のオブジェクトはフィールドに直接アクセスし、フィールドを持つオブジェクトによって検出されずに変更できます.属性(C#プログラミングガイド)を使用してこのフィールドをカプセル化することで、フィールドへの直接アクセスを禁止できます.<3>フィールド宣言と同じ行にカーソルを合わせた場合にのみ、フィールドのカプセル化操作を実行できます.
◆実例
ほとんどの開発者はクラスレベルの変数(フィールド)を外部に露出することに慣れている.各オブジェクトはオブジェクト向けプログラミングに属するため、開発者は属性または方法で変数にアクセスできるようにする必要があります.この場合、再構築メニューの「フィールドのカプセル化」オプションを使用して処理できます.
このため、プロパティにパッケージしたいクラス変数を選択し、「フィールドのカプセル化」オプションを選択します.次の図のようなダイアログが開きます.
属性の名前を入力し、クラス外またはクラス内部から変数の参照に更新するかどうかを決定する必要があります.[名前を変更](Rename)ダイアログボックスのように、適用する前に変更内容をプレビューできます.
ソース:
string s;
パッケージ後のコード:
string s;
public string S
{
get { return s; }
set { s = value; }
}
【4】抽出インタフェース
<1>既存のクラス、構造、またはインタフェースのメンバーを使用して新しいインタフェースを作成する簡単な方法.
<2>複数のクライアントがクラス、構造、またはインタフェース内のメンバーの同じサブセットを使用する場合、または複数のクラス、構造、またはインタフェースに共通のメンバーサブセットがある場合、インタフェースにメンバーサブセットを埋め込むと便利です.
<3>この機能にアクセスできるのは、抽出するメンバーを含むクラス、構造、またはインタフェースにカーソルを合わせた場合のみです.カーソルがこの位置にある場合、抽出インタフェースの再構築操作が呼び出されます.
◆実例
【5】局所変数をパラメータに上げる
<1>呼び出しサイトを正しく更新しながら、変数をローカル使用からメソッド、インデックス、またはコンストラクタパラメータに移動する簡単な方法を提供する.
<2>ローカル変数をパラメータに上げる操作を呼び出すと、メンバーパラメータリストの末尾に変数が追加する.
<3>変更するメンバーに対する呼び出しは、新しいパラメータ(最初に変数に与えられた式に代わる)を使用して直ちに更新され、変数が昇格する前のように正常に動作するようにコードが保持される.
<4>この再構成は、アップグレードされた変数に定数値を割り当てる場合に最も効果的です.変数を宣言して初期化する必要がありますが、宣言または付与のみはできません.
◆実例
ソース:
private static void NewMethod2()
{
string s = "";
}
sを選択し、変換後、
private static void NewMethod2(string s)
{
}
【6】パラメータの除去
<1>メソッド、インデックス、または依頼からパラメータを除去する簡単な方法.
<2>呼び出したメンバーの任意の場所で、パラメータが削除され、新しい宣言が反映されます.
◆実例
ソース:
protected void Page_Load(EventArgs e, object sender)
{
int i = 0;
NewMethod2("1","2");
}
private static void NewMethod2(string s1, string s2)
{
string s = s1 + s2;
}
削除後のコード:
protected void Page_Load(EventArgs e, object sender)
{
int i = 0;
NewMethod2();
}
private static void NewMethod2()
{
string s = s1 + s2;
}
【7】パラメータの並び替え
<1>メソッド、インデックス、および委任パラメータの順序を変更する簡単な方法.
<2>メソッド宣言またはメソッド呼び出しによってパラメータを再配置できます.本文ではなく、メソッド宣言または委任宣言にカーソルを置きます.
◆実例
ソース:
private static void NewMethod2(string s1,string s2)
{
}
並べ替えた後、
private static void NewMethod2(string s2,string s1)
{
}