重新命名
更新:2007 年 11 月
[重新命名] 是 Visual Studio 整合式開發環境 (IDE) 中的重構功能,提供將欄位、區域變數、方法、命名空間 (Namespace)、屬性及型別等程式碼符號之識別項重新命名的簡單方式。[重新命名] 可以用來變更註解和字串中的名稱,並可變更識別項的宣告和呼叫。
注意事項: |
---|
當使用 Visual Studio 的原始檔控制時,請在嘗試執行重新命名重構之前,先取得最新版本的原始檔。 |
您可以從下列 Visual Studio 功能中使用重新命名重構:
功能 |
IDE 中的重構行為 |
||
---|---|---|---|
程式碼編輯器 |
在程式碼編輯器中,將游標置於某些型別的程式碼符號上,即可使用重新命名重構。當游標在這個位置時,您可以輸入鍵盤快速鍵 (CTRL + R、R),或是從智慧標籤、快速鍵功能表或 [重構] 功能表選取 [重新命名] 命令來叫用 (Invoke) [重新命名] 命令。當您叫用 [重新命名] 命令時,[重新命名] 對話方塊便會出現。如需詳細資訊,請參閱重新命名對話方塊和 HOW TO:重新命名識別碼。 |
||
類別檢視 |
當您在 [類別檢視] 中選取識別項時,即可從快速鍵功能表和 [重構] 功能表使用重新命名重構。 |
||
物件瀏覽器 |
當您在物件瀏覽器中選取識別項時,只能從 [重構] 功能表使用重新命名重構。 |
||
Windows Form 設計工具的屬性方格 |
在 Windows Form 設計工具的 [屬性方格] 中,變更控制項的名稱會起始該控制項的重新命名作業。不過 [重新命名] 對話方塊不會出現。 |
||
方案總管 |
在 [方案總管] 中,可從快速鍵功能表使用 [重新命名] 命令。如果選取的原始程式檔包含的類別,其名稱與檔名相同,您就可以使用這個命令同步重新命名原始程式檔並執行重新命名重構。 例如,如果您建立了預設的 Windows 應用程式,然後將 Form1.cs 重新命名為 TestForm.cs,則原始程式檔名 Form1.cs 將變更為 TestForm.cs,而類別 Form1 及該類別的所有參考都會重新命名為 TestForm。
如果選取的原始程式檔未包含名稱與檔名相同的類別,則 [方案總管] 中的 [重新命名] 命令只會重新命名原始程式檔,而不會執行重新命名重構。 |
重新命名作業
當您執行 [重新命名] 時,重構引擎會對各程式碼符號執行重新命名作業,如下表所述。
程式碼符號 |
重新命名作業 |
||
---|---|---|---|
欄位 |
將欄位的宣告及出現的地方變更為新名稱。 |
||
區域變數 |
將變數的宣告及出現的地方變更為新名稱。 |
||
方法 |
將方法的名稱及該方法的所有參考變更為新名稱。
|
||
命名空間 |
在宣告、所有的 using 陳述式 (Statement) 和完整名稱中,將命名空間的名稱都變更為新的名稱。
|
||
屬性 |
將屬性的宣告及出現的地方變更為新名稱。 |
||
型別 |
將型別的所有宣告和所有出現的地方變更為新名稱,包括建構函式 (Constructor) 和解構函式 (Destructor)。至於部分型別,重新命名作業會將所有部分一起變更。 |
備註
重新命名實作或覆寫的成員
若您 [重新命名] 的成員會實作/覆寫其他型別的成員,或會遭到其他型別的成員實作/覆寫,Visual Studio 就會顯示對話方塊,說明此重新命名作業將導致一系列更新。如果您按一下 [繼續],重構引擎便會在基底型別和衍生型別中,遞迴地尋找並重新命名與所重新命名的成員之間具有實作/覆寫關係的所有成員。
下列程式碼範例中包含具有實作/覆寫關係的成員。
interface IBase
{
void Method();
}
public class Base
{
public void Method()
{ }
public virtual void Method(int i)
{ }
}
public class Derived : Base, IBase
{
public new void Method()
{ }
public override void Method(int i)
{ }
}
public class C : IBase
{
public void Method()
{ }
}
在上述範例中,由於 C.Method() 實作 Ibase.Method(),重新命名 C.Method() 也會重新命名 Ibase.Method()。接下來,重構引擎遞迴地發現 Ibase.Method() 是由 Derived.Method() 實作,所以重新命名 Derived.Method()。重構引擎不會重新命名 Base.Method(),因為 Derived.Method() 並不會覆寫 Base.Method()。重構引擎會在此停止,除非 [重新命名 ] 對話方塊中已核取 [重新命名多載]。
如果已核取 [重新命名多載],則重構引擎會重新命名 Derived.Method(int i) 因為它多載 Derived.Method(),重新命名 Base.Method(int i) 因為它遭到 Derived.Method(int i) 多載,並重新命名 Base.Method() 因為它是 Base.Method(int i) 的多載。
注意事項: |
---|
當您重新命名於參考組件 (Assembly) 中定義的成員時,會出現對話方塊,說明此重新命名將造成建置 (Build) 錯誤。 |
重新命名匿名型別的屬性
當您重新命名匿名型別中的屬性時,重新命名作業將會傳送到具有相同屬性之其他匿名型別中的屬性。下列範例會說明這項行為。
var a = new { ID = 1};
var b = new { ID = 2};
在上述程式碼中,由於兩個陳述式都具有相同的基礎匿名型別,重新命名 ID 將會在兩個陳述式中都變更 ID。
var companyIDs =
from c in companylist
select new { ID = c.ID, Name = c.Name};
var orderIDs =
from o in orderlist
select new { ID = o.ID, Item = o.Name};
在上述程式碼中,由於 companyIDs 和 orderIDs 沒有相同的屬性,重新命名 ID 將只會重新命名一個 ID 的執行個體。