C#編寫方法執行個體

來源:互聯網
上載者:User

  開發應用程式邏輯

  1. 在Visual Studio 2005中開啟My Documents檔案夾下的\Microsoft Press\Visual CSharp Step by Step\Chapter 3\DailyRate子檔案夾中的DailyRate項目。

  2. 在“方案總管”中,雙擊Program.cs檔案,以便在“代碼和文字編輯器”視窗中顯示程式。

  3. 在run方法主體中添加以下語句:

double dailyRate = readDouble("Enter your daily rate: ");
int noOfDays = readInt("Enter the number of days: ");
writeFee(calculateFee(dailyRate, noOfDays));

  應用程式啟動時,run方法將由Main方法調用。

  剛才在run方法中添加的代碼塊會調用readDouble方法(馬上就要開始寫這個方法),以便讓使用者輸入顧問的日費率。下一個語句調用readInt方法(也馬上由我們來寫)來擷取天數。最後將調用writeFee方法(等待編寫),以便在螢幕上顯示結果。注意,傳給writeFee的值是calculateFee方法(最後一個要寫的方法)返回的值,該方法擷取日費率和天數,並計算出要支付的總金額。

  注意 由於尚未寫好readDouble,readInt,writeFee或者calculateFee方法,所以“智能感知”無法在輸入上述代碼的時候自動列出它們。另外,先不要試圖產生程式,因為肯定會失敗。

  使用“產生方法存根嚮導”來編寫方法

  1. 在“代碼和文字編輯器”視窗中,單擊run方法中的readDouble方法調用。

  隨後會在readDouble的第一個字母("r")下方顯示一個小的底線表徵圖。將滑鼠指標移至字母"r",會自動出現一個表徵圖。將滑鼠指標懸停在這個表徵圖上方,會顯示一條工具提示:“用於產生方法存根的選項(Shift + Alt + F10)”,並提供了一個下拉式功能表。單擊下拉式功能表,就會看到一個選項:產生"DailyRate.Program"中的"ReadDouble"的方法存根。

  2. 單擊“產生"DailyRate.Program"中的"ReadDouble"的方法存根”選項。

  隨後,“產生方法存根嚮導”會檢查對readDouble方法的調用,判斷參數類型和傳回值,並產生一個具有預設實現的方法,如下所示:

private double readDouble(string p)
{
throw new Exception("The method or operation is not implemented.");
}

  新方法是使用一個private限定符來建立的。方法主體目前只是擲出一個異常。我們將在下一步將主體替換成自己的語句。

  3. 從readDouble方法中刪除throw new Exception(…);語句,將它替換成以下程式碼:

Console.Write(p);
string line = Console.ReadLine();
return double.Parse(line);

  上述代碼塊會將變數p中的字串輸出到螢幕。該變數是調用方法是傳遞的字串參數,其中包含提示使用者輸入日費率的一條訊息。使用者輸入一個值,該值將通過ReadLine方法讀入一個字串中,並通過double.Parse方法轉換成一個double值。結果將作為方法調用的傳回值傳回。

  注意 ReadLine方法是與WriteLine配套的一個方法,它從鍵盤讀取使用者直到按斷行符號鍵之前的輸入。使用者輸入的文本將作為傳回值傳回。

  4. 在run方法中,單擊readInt方法調用,按照和前面一樣的過程,為readInt方法產生一個方法存根。

  readInt方法將使用一個預設的實現來產生。

  提示 為了產生一個方法存根,還可以右擊一個方法調用,並從快顯功能表中選擇“產生方法存根”。

  5. 將readInt方法的主體替換成以下語句:

Console.Write(p);
string line = Console.ReadLine();
return int.Parse(line);

  這個代碼塊和readDouble方法的非常相似。惟一的區別是方法返回一個int值,所以要使用int.Parse方法將字串轉換成整數。

  6. 右擊run方法中的calculateFee方法調用,選擇“產生方法存根”。

  隨後會產生calculateFee方法:

private object calculateFee(double dailyRate, int noOfDays)
{
throw new Exception("The method or operation is not implemented");
}

  注意,“產生方法存根嚮導”使用傳入的實參名稱來產生形參名稱(當然,假如覺得不合適,完全可以更改形參名稱)。更讓人感興趣的是方法的傳回型別,目前是object。這表明“產生方法存根嚮導”無法根據當前的上下文來確定方法應該返回什麼類型的值。object類型只是意味著一樣“東西”,在方法中添加具體的代碼時,應該把它修改成自己需要的類型。

  7. 修改calculateFee方法的定義,使它返回一個double值:

private double calculateFee (double dailyRate, int noOfDays)
{
throw new Exception("The method or operation is not implemented");
}

  8. 將calculateFee方法的主體替換成以下語句,它計算兩個參數值的乘積來獲得需要支付的金額,並返回結果。

return dailyRate * noOfDays;

  9. 右擊run方法中的writeFee方法調用,選擇“產生方法存根”。

  隨後會產生writeFee方法。注意,“產生方法存根嚮導”根據calculateFee方法的定義判斷出writeFee方法的參數應該是一個double參數。另外,方法調用沒有使用一個傳回值,所以方法的類型為void:

private void writeFee(double p)
{
...
}

  10. 在writeFee方法內部輸入以下語句:

Console.WriteLine("The consultant's fee is: {0}", p * 1.1);

  注意 這個版本的WriteLine方法示範了如何利用一個簡單的格式字串。{0}是一個預留位置;在求值的時候,它會被字串之後的運算式(p * 1.1)的值替換掉。

  11. 選擇“產生”|“產生解決方案”。
重構代碼

  Visual Studio 2005非常有用的一項特性就是對代碼進行重構。某些時候,我們需要在應用程式的多個位置寫相同的(或者非常相似的)代碼。在這種情況下,可以選定剛剛輸入的代碼塊,然後從功能表列中選擇“重構”|“提取方法”。隨後會出現“提取方法”對話方塊,提示你輸入一個新方法的名稱,該方法將用於包含你剛才輸入的代碼。請輸入方法名,並單擊“確定”。隨後,系統將建立這個方法,並將你剛才輸入的代碼轉移到其中,剛才輸入的代碼則被替換成對該方法的一個調用。“提取方法”還具有一定的智能,可以判斷方法是否應該擷取任何參數和傳回值。

  測試程式

  1. 選擇“調試”|“開始執行(不調試)”,Visual Studio 2005將產生程式,並運行它。運行時會顯示一個控制台視窗。

  2. 在Enter Your Daily Rate(輸入日費率)提示之後,請輸入525,然後按斷行符號鍵。

  3. 在Enter The Number Of Days(輸入天數)提示之後,請輸入17,然後按斷行符號鍵。

  程式會在控制台上顯示以下訊息:

The consultant's fee is: 9817.5

  按斷行符號鍵返回Visual Studio 2005編程環境。

  在最後一個練習中,將使用Visual Studio 2005調試器,以比較慢的步調來運行程式。你將看到每個方法被調用的時刻(這個行動稱為跳入),並看到每個return語句如何將控制返還給調用者(這個行動稱為跳出)。進入和離開方法時,都需要使用“調試”工具列上的工具。然而,在偵錯模式中運行應用程式時,相同的命令也可從“調試”菜單中選擇。

  使用Visual Studio 2005調試器依次執行每個方法

  1. 在“代碼和文字編輯器”視窗中,找到run方法。

  2. 使滑鼠指標對準run方法中的第一個語句。

  run方法的第一個語句是:

double dailyRate = readDouble("Enter your daily rate: ");

  3. 右擊該行的任何地方,從快顯功能表中選擇“運行到游標處”。

  程式將開始運行,並在抵達run方法的第一個語句之後暫停。“代碼和文字編輯器”視窗左側的一個黃色箭頭指明了當前語句,該語句還會用一個黃色背景來反白。

  4. 選擇“視圖”|“工具列”,確定已經勾選了“調試”工具列。“調試”工具列也許會停靠在其他工具列旁邊。如果找不到這個工具列,可以試著使用“視圖”菜單中的“工具列”命令暫時隱藏它,並留意哪些按鈕從介面上消失了。重新顯示這個工具列,就可以知道它應該在什麼位置出現。

  提示 要想將“調試”工具列獨立出來,請使用工具列左側的控點,把它拖放以“代碼和文字編輯器”視窗上方。

  5. 單擊“調試”工具列上的“逐語句”按鈕。這個行動會使調試器跳入正在調用的方法。左側的黃色箭頭會指向readDouble方法的起始大括弧。再次單擊“逐語句”按鈕,指標會轉向第一個語句:Console.Write(p);

  提示 按F11鍵的作用等同於單擊“調試”工具列上的“逐語句”按鈕。

  6. 單擊“調試”工具列上的“逐過程”按鈕。這會導致方法執行下一個語句而不調試它。黃色箭頭將指向方法的第二個語句,程式會在一個控制台視窗中顯示“Enter Your Daily Rate”提示(控制台視窗可能隱藏在Visual Studio 2005後面)。

  提示 按F10鍵的作用等同於單擊“調試”工具列上的“逐過程”按鈕。

  7. 單擊“調試”工具列上的“逐過程”按鈕。這一次,黃色箭頭會消失,控制台視窗將獲得焦點,因為程式正在執行Console.ReadLine方法,要求使用者輸入一些內容。

  8. 在控制台視窗中輸入525,按斷行符號鍵繼續。

  隨後,控制將返回Visual Studio 2005。黃色箭頭將在方法的第三行出現。

  9. 不要做出任何單擊行動,請將滑鼠指標移至方法第二行或第三行對line變數的引用上(具體對準哪一行無關緊要)。

  隨後會出現一條工具提示,它顯示了line變數的當前值(525)。利用這個特性,可以確定在逐方法執行的時候,變數已經設定成自己期望的一個值。

  10. 單擊“調試”工具列上的“跳出”按鈕。

  這會導致當前方法繼續無中斷地運行,直到結束。當readDouble方法執行完畢之後,黃色箭頭會指回run方法的第一個語句。

  提示 按Shift + F11鍵的作用等同於單擊“調試”工具列上的“跳出”按鈕。

  11. 單擊“調試”工具列上的“逐語句”按鈕。

  黃色箭頭會移至run方法的第二個語句:

int noOfDays = readInt("Enter the number of days: ");

  12. 單擊“調試”工具列上的“逐過程”按鈕。

  這一次,選擇了直接運行方法,而不逐語句地調試該方法。控制台視窗將再次出現,提示輸入一個天數。

  13. 在控制台視窗中輸入17,按斷行符號鍵繼續。

  控制將返回至Visual Studio 2005。黃色箭頭將移至run方法的第三個語句:

writeFee(calculateFee(dailyRate, noOfDays));

  14. 單擊“調試”工具列上的“逐語句”按鈕。

  黃色箭頭將跳至calculateFee方法的起始大括弧處。該方法將先於writeFee方法被調用。

  15. 單擊“調試”工具列上的“跳出”按鈕。

  黃色箭頭將跳回run方法的第三個語句。

  16. 單擊“調試”工具列上的“逐語句”按鈕。

  這一次,黃色箭頭將跳至writeFee方法的起始大括弧處。

  17. 讓滑鼠指標對準方法定義中的p變數。

  隨後將顯示p的值(8925.0)。

  18. 單擊“調試”工具列上的“跳出”按鈕。

  隨後會在控制台視窗中顯示訊息“The consultant's fee is: 9817.5”(如果控制台視窗隱藏在Visual Studio 2005之後,請把它帶到前台來顯示)。黃色箭頭將返回run方法的第三個語句。

  19. 單擊“調試”工具列上的“繼續”按鈕,使程式連續運行,而不在每個語句處暫停。

  應用程式將一直運行至結束。

  提示 還可以按F5鍵在調試器中繼續執行。

  恭喜!你已經成功編寫並調用了方法,並利用Visual Studio 2005調試器對它們進行了調試。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.