シンボルの名前変更の概要
(シンボルの名前変更の概要(Delphi、C++)から転送)
識別子の名前変更と、変更対象の識別子のすべての参照箇所の名前変更を行います。 識別子の名前を変更できるのは、その識別子の元の宣言が自分のプロジェクトにある場合、または自分のプロジェクトが依存している別のプロジェクトにあって、そのプロジェクトが開かれている同じプロジェクト グループ内にある場合です。 この条件に合う、型名、メソッド名、変数、フィールドなどの識別子の名前を変更できます。 Delphi では、ジェネリックスを使って識別子の名前を変更できます。
リファクタリング エンジンでは、次のような名前変更ルールが強制的に適用されます。
- 識別子の名前をキーワードに変更することはできない。
- 識別子の名前を、大文字小文字が異なっていても、既存の識別子名と同じ名前に変更することはできない。
- 元の宣言識別子が存在するプロジェクトが開いていない場合は、従属するプロジェクト内から、識別子の名前変更はできない。
- コンパイラによってインポートされたシンボルの名前変更はできない。
- 基底メソッドが、自分のプロジェクト内にないクラスで宣言されている場合は、それをオーバライドしたメソッドの名前変更はできない。
- コンストラクタまたはデストラクタの名前変更はできない。
- リファクタリングの結果、エラーが発生した場合は、リファクタリング エンジンは変更を適用できません。 たとえば、識別子の名前を、同じ宣言スコープ内に既に存在する名前に変更することはできません。 それでも識別子の名前変更を行いたい場合は、変更後の名前を既に持つ識別子の名前変更を行ってから、改めてリファクタリングを実行します。 リファクタリングを再実行したり、新規の名前を選択することもできます。 リファクタリング エンジンは、親のスコープを走査して、同じ名前の識別子を検索します。 同じ名前の識別子が見つかった場合は、警告が出されます。
- ジェネリックスを使って識別子の名前変更をすると、型パラメータの名前は変更できません。 つまり、次のような宣言があった場合、
type List<Item> = class ... end;
識別子
Item
(型パラメータ)の名前は変更できませんが、識別子List
の名前は変更できます。
メソッドの名前変更
メソッドの名前変更は、その他の識別子の名前変更と機能的に同じです。 コード エディタで手続き名を選択すれば、その手続きの名前変更ができます([リファクタリング|名前の変更...]コマンドを使用)。 手続きがオーバーロードされている場合は、リファクタリング エンジンは、オーバーロード済みの手続きと、その呼び出しのみを名前変更します。 次に、このルールの適用例を示します:
procedure Foo; overload; procedure Foo(A:Integer); overload; Foo(); Foo; Foo(5);
前のコード ブロックの最初の手続き Foo を名前変更すると、リファクタリング エンジンは、1番目、3番目、および4番目の手続きを名前変更します。
オーバーライドされている識別子を名前変更した場合は、リファクタリング エンジンは、基底宣言とすべての子孫宣言(つまり、元の仮想識別子とオーバーライド済みのすべての識別子)を名前変更します。 次に、このルールの適用例を示します。
TFoo = class procedure Foo; virtual; end; TFoo2 = class(TFoo) procedure Foo; override; end; TFoo3 = class(TFoo) procedure Foo; override; end; TFoo4 = class(TFoo3) procedure Foo; override; end;
Foo に対して名前変更を実行すると、前のコード サンプル内のすべての Foo の箇所が名前変更されます。