共用方式為


擷取方法

更新:2007 年 11 月

[擷取方法] 是一項重構作業,可讓您輕鬆地從現有成員的程式碼片段建立新方法。如需詳細資訊,請參閱重構

您可以使用 [擷取方法] 從現有成員的程式碼區塊內擷取選取的程式碼範圍,藉此建立新的方法。新的擷取方法會包含選取的程式碼,而在現有成員中的已選定程式碼會取代成新方法的呼叫。將程式碼片段轉變成自己的方法,能讓您迅速和正確地重新組織程式碼,以便重複使用並提升可讀性。

[擷取方法] 具有下列優點:

  • 強調獨立且可重複使用的方法,進而採行最佳編碼做法。

  • 由於組織完善,可建立自我記錄的程式碼。

    當使用描述性名稱時,高層次的方法讀起來就像一系列註解。

  • 可建立更精細的方法,以簡化覆寫。

  • 減少程式碼重複。

備註

當您使用 [擷取方法] 命令時,新方法會插入到同一類別中來源成員之後。

部分型別

如果類別是部分型別,[擷取方法] 便會產生緊接在來源成員之後的新方法。[擷取方法] 會判斷新方法的簽章,同時在新方法中的程式碼沒有參考任何執行個體 (Instance) 資料時建立靜態方法。

泛型型別參數

如果您擷取的方法有不受限制的泛型型別參數,產生的程式碼就不會將 ref 修飾詞 (Modifier) 加入至參數,除非已指派值給參數。如果擷取的方法能夠將參考型別 (Reference Type) 當做泛型型別引數,則您應手動將 ref 修飾詞加入至方法簽章中的參數。

匿名方法

如果嘗試擷取匿名方法 (Anonymous Method) 的部分,而其中參考了在該匿名方法外部宣告或參考的區域變數,則 Visual Studio 將會警告您可能發生語意變更。

若匿名方法使用區域變數的值,會在執行匿名方法時取得該值。將匿名方法擷取至其他方法內時,則會在呼叫擷取方法時取得區域變數的值。

下列範例將說明這個語意變更。如果執行這段程式碼,主控台顯示的會是 11。如果您使用 [擷取方法] 將程式碼註解標記的程式碼區域擷取到自己的方法內,然後執行重構的程式碼,則主控台將會顯示 10

class Program
{
    delegate void D();
    D d;
    static void Main(string[] args)
    {
        Program p = new Program();
        int i = 10;
        /*begin extraction*/
            p.d = delegate { Console.WriteLine(i++); };
        /*end extraction*/
        i++;
        p.d();
    }
}

若要解決這種情況,請將匿名方法中使用的區域變數當做類別的欄位。

請參閱

工作

HOW TO:使用擷取方法重構程式碼