次の方法で共有


フィールドのカプセル化リファクタリング (C#)

[フィールドのカプセル化] リファクタリング操作により、既存のフィールドからプロパティをすばやく作成し、コードを新規プロパティへの参照に合わせて更新できます。

フィールドpublic である場合、他のオブジェクトは、そのフィールドを所有するオブジェクトに検知されずに、そのフィールドに直接アクセスして変更できます。プロパティを使用してこのようなフィールドをカプセル化することにより、フィールドへの直接アクセスを禁止できます。

新規プロパティを作成するために、[フィールドのカプセル化] によって、カプセル化するフィールドのアクセス修飾子が private に変更され、そのフィールドの get アクセサーおよび set アクセサーが生成されます。フィールドが読み取り専用で宣言されている場合など、get アクセサーだけが生成されることもあります。

リファクタリング エンジンでは、[フィールドのカプセル化] ダイアログ ボックスの [参照の更新] セクションで指定した領域について、新規プロパティへの参照に基づいてコードが更新されます。

フィールドからプロパティを作成するには

  1. EncapsulateFieldExample という名前のコンソール アプリケーションを作成し、Program を次のプログラム例で置き換えます。

    class Square
    {
        // Select the word 'width' and then use Encapsulate Field.
        public int width, height;
    }
    class MainClass
    {
        public static void Main()
        {
            Square mySquare = new Square();
            mySquare.width = 110;
            mySquare.height = 150;
            // Output values for width and height.
            Console.WriteLine("width = {0}", mySquare.width);
            Console.WriteLine("height = {0}", mySquare.height);
        }
    }
    
  2. コード エディター でカプセル化するフィールドの名前に宣言にカーソルを移動します。次の例では、カーソルを width という語に移動します。

    public int width, height;
    
  3. [リファクター] メニューの [フィールドのカプセル化] をクリックします。

    [フィールドのカプセル化] ダイアログ ボックスが表示されます。

    キーボード ショートカットとして、Ctrl キーを押しながら R キーを押し、次に Ctrl キーを押しながら E キーを押すことでも、[フィールドのカプセル化] ダイアログ ボックスを表示できます。

    [フィールドのカプセル化] ダイアログ ボックスを表示するには、カーソルを右クリックし、[リファクター] をポイントして、[フィールドのカプセル化] をクリックする方法もあります。

  4. 設定を指定します。

  5. Enter キーを押すか、[OK] をクリックします。

  6. [参照の変更のプレビュー] を選択した場合は、[参照の変更のプレビュー] ウィンドウが表示されます。[適用] をクリックします。

    次の get アクセサー コードおよび set アクセサー コードがソース ファイルに表示されます。

    public int Width
    {
        get { return width; }
        set { width = value; }
    }
    

    Main メソッドのコードも、新しい Width プロパティ名で更新されます。

    Square mySquare = new Square();
    mySquare.Width = 110;
    mySquare.height = 150;
    // Output values for width and height.
    Console.WriteLine("width = {0}", mySquare.Width);
    

解説

[フィールドのカプセル化] は、カーソルがフィールド宣言と同じ行にある場合だけ利用できます。

複数のフィールドが宣言されている宣言では、[フィールドのカプセル化] はコンマをフィールド間の区切り文字として使用し、カーソルに最も近く、カーソルと同じ行にあるフィールドのリファクタリングを開始します。宣言でフィールドの名前を選択することで、カプセル化するフィールドを指定することもできます。

このリファクタリング操作によって生成されるコードは、[フィールドのカプセル化] コード スニペット機能でモデル化されています。コード スニペットは変更できます。詳細については、「コード スニペット」を参照してください。

参照

関連項目

Visual C# のコード スニペット

概念

リファクタリング (C#)