在下面的練習中,將創建一個應用程序,它包含的一個方法能夠計算一名顧問的收費金額——假定該顧問每天收取固定的費用,將根據工作了多少天來收費。首先要開發應用程序的邏輯,然後利用“生成方法存根向導”來寫出這個邏輯使用的方法。接著,我們將在一個控制台應用程序中運行方法,以獲得對該程序的最終印象。最後,我們將使用Visual Studio 2005調試器來檢查方法調用。
開發應用程序邏輯
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方法將字符串轉換成整數。